Правильная ссылка на эту страницу
http://az-design.ru/Support/DataBase/DBTree2/2300.shtml

Таблица с составными ключами

Архангельский Андрей

       Иногда требуется построить древовидную структуру в таблице, в которой PK состоит из нескольких полей, причем одно поле служит для создания древовидной структуры, а остальные поля служать для связи с другими таблицами.
       Например, это может быть так:

Create table FamGroup
     (FamlID     Integer not null references FamilyList on update cascade,
      ModlID     Integer not null,
      FamlPrn    Integer default 0,
      ModlPrn    Integer default 0,
      ModOrder   Integer default 0,
      ModlName   Char(180) character set win1251,
Primary Key (FamlID,ModlID));
Commit;
Alter table FamGroup add foreign key (FamlPrn,ModlPrn) 
      references FamGroup on update cascade;
Commit;

       С одной стороны, т.к. одно из ключевых полей не участвует в построении дерева, то поле FamlPrn можно было бы исключить и записать связь следующим образом:

Alter table FamGroup add foreign key (FamlID,ModlPrn)
      references FamGroup on update cascade;
Commit;

       но оказалось, что в этом случае возникают ошибки, так как при изменении поля, которое не участвует в построении дерева, за счет связи оно должно изменять само себя. А это не есть хорошо и правильным будет использование двух полей Parent.

© 01.08.2009, Архангельский А.Г.

<<Пред. Оглавление
Начало раздела
След.>>




Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:44 MSK


Постоянный адрес статьи:
http://az-design.ru/Support/DataBase/DBTree2/2300.shtml