Склонение ФИО (постановка)

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Пример использования)
Строка 6: Строка 6:
 
     refid    dintkey,
 
     refid    dintkey,
 
     langid  CHAR(20) NOT NULL,
 
     langid  CHAR(20) NOT NULL,
     caseid  CHAR(1) NOT NULL,
+
     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'
 ...

Организация пользовательского интерфейса

Ссылки по теме

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты