Склонение ФИО (постановка)
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) (→Пример использования) |
SYSDBA (обсуждение | вклад) |
||
| Строка 6: | Строка 6: | ||
refid dintkey, | refid dintkey, | ||
langid CHAR(20) NOT NULL, | langid CHAR(20) NOT NULL, | ||
| − | caseid CHAR(1) | + | caseid CHAR(1), |
name dname, | name dname, | ||
| Строка 62: | Строка 62: | ||
20000001 BE N Іваноў Іван Іванавіч | 20000001 BE N Іваноў Іван Іванавіч | ||
20000002 EN NULL Soap | 20000002 EN NULL Soap | ||
| + | |||
| + | Запрос, который извлечет ФИО человека в родительном падеже, будет выглядеть следующим образом: | ||
| + | |||
| + | SELECT | ||
| + | ... | ||
| + | COALESCE(m.name, c.name), | ||
| + | ... | ||
| + | FROM | ||
| + | ... | ||
| + | gd_contact c LEFT JOIN gd_multiname m | ||
| + | ON c.id = m.refid AND m.langid = 'RU' AND m.caseid = 'G' | ||
| + | ... | ||
=== Организация пользовательского интерфейса === | === Организация пользовательского интерфейса === | ||
Версия 18:42, 29 июля 2008
Предлагается решить проблемы склонения имен по падежам и хранения имен на разных языках следующим образом:
Создаем таблицу:
CREATE TABLE gd_multiname ( refid dintkey, langid CHAR(20) NOT NULL, caseid CHAR(1), name dname, PRIMARY KEY gp_pk_multiname (refid, langid, caseid) )
Эта таблица будет хранить название объекта с идентификатором refid, на языке langid в падеже caseid.
Содержание |
Идентификаторы падежей для русского языка
| Название | Идентификатор |
| Именительный | N |
| Родительный | G |
| Дательный | D |
| Винительный | A |
| Творительный | B |
| Предложный | L |
Пример использования
Пусть в таблице GD_CONTACT мы имеем запись:
ID NAME ========================================== 20000001 Иванов Иван Иванович
а в таблице GD_GOOD:
ID NAME ========================================== 20000002 Мыло
Тогда, в таблице GD_MULTINAME могут быть следующие записи:
REFID LANGID CASEID NAME ============================================================= 20000001 RU D Иванову Ивану Ивановичу 20000001 RU G Иванова Ивана Ивановича 20000001 BE N Іваноў Іван Іванавіч 20000002 EN NULL Soap
Запрос, который извлечет ФИО человека в родительном падеже, будет выглядеть следующим образом:
SELECT
...
COALESCE(m.name, c.name),
...
FROM
...
gd_contact c LEFT JOIN gd_multiname m
ON c.id = m.refid AND m.langid = 'RU' AND m.caseid = 'G'
...