Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

PostgreSQL наследование и fk [D7, Postgres 8.2]


Девушка ©   (2007-09-13 06:42:00) 

Добрый день!

В базе на PostgreSQL 8.2 есть следующие таблицы:
А1, А2- наследник А1, А3- наследник А1 и А21 - наследник А2
(напрмер они хранят данные о разных изделиях, здесь А1 - базовое изделие)

Есть таблица В. Для наглядности - пусть в ней хранится позиция заказа.
Т.е. в таблице В должна быть ссылка на данные в таблице изделий и все её дочерние таблицы.
Например, мы хотим чтобы в заказ можно было добавить А1 - простая штука, но можно было добавить и А2 - конкретная штука.
НО!
Если мы в таблицу В добавляем внешний ключ на таблицу А1, то Postgres воспринимает это слишком буквально :) и не дает добавлять туда данные из А2 и т.д....
Т.е. таблица В получилась у нас не таблицей Заказа всевозможных штук, а таблицей заказа простых штук.

как это обойти?
поддерживать ли FK иными средствами, либо создать наследников В1 и т.д.
но тогда видимо не получится создавать смешаные заказы...


Johnmen   (2007-09-14 14:52:00) [1]


> Девушка ©   (14.09.07 13:44) [3]
> > быть без констрейнтов (ограничений), которые мешают что-
> > то там добавлять...
> вообщето первичный ключ - само по себе ограничение

Я написал про FK, что читается как Foreign Key или Внешний Ключ.
Про первичный ничего не говорил...


Девушка   (2007-09-14 13:48:00) [2]

Привожу пример для лучшего понимания...

Есть родительская таблица справочник товаров. У нее есть дочерние таблицы типа столы, стулья, компьютеры и т.д. И есть таблица заказы. Родительская таблица "справочник товаров" и таблица "заказы" должны быть связаны внешним ключом.

но в Postgres както проблемно реализовано наследование, поэтому установка первичного ключа между "заказы" и "справочник товаров" создает ограничение: что связаны должны быть ТОЛЬКО таблицы "заказы" и "справочник товаров"  без учета наследования...

как это обойти?
(можно конечно попробовать "звезду смерти" :) )


Девушка   (2007-09-14 13:46:00) [3]


> Не использовать Постгресовские извраще... пардон, расширения.

если не использовать наследование таблиц, то проще на интербайзе остаться...
и реализовывать все что я хочу получить от наследования (например выборки дочерних таблиц) вручную... сомневаюсь что и меня выйдет лучше..


Девушка   (2007-09-14 13:44:00) [4]


> быть без констрейнтов (ограничений), которые мешают что-
> то там добавлять...

вообщето первичный ключ - само по себе ограничение


DrPass   (2007-09-14 11:51:00) [5]


> как это обойти?

Не использовать Постгресовские извраще... пардон, расширения. Сделай A2/A3 обычной отдельной таблицей, по FK ссылающейся 1 к 1 на A1, и хранящей детальную информацию для тех записей, которые касаются "конкретных штук"
Таблица B пусть ключуется на A1, которая просто будет единым каталогом изделий


Johnmen   (2007-09-13 18:28:00) [6]

Не очень понятно, что за "не дает добавлять туда данные из А2", но предполагаю, дело в том, что внешний(-ие) ключ(-и) должен(-ны) быть без констрейнтов (ограничений), которые мешают что-то там добавлять...


Наверх

Титульная страница Поиск, карта сайта Написать письмо