Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.20;
Скачать: CL | DM;

Вниз

PostgreSQL наследование и fk   Найти похожие ветки 

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

Добрый день!

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

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

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


 
Johnmen ©   (2007-09-13 18:28) [1]

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


 
DrPass ©   (2007-09-14 11:51) [2]


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

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


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


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

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


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


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

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


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

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

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

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

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


 
Johnmen ©   (2007-09-14 14:52) [6]


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.01.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
15-1197374566
PEAKTOP
2007-12-11 15:02
2008.01.20
Вертикальная совместимость - Ваше мнение


11-1182538380
Infarkt
2007-06-22 22:53
2008.01.20
onMouseWheel на ScrollBox


15-1197412788
Drowsy
2007-12-12 01:39
2008.01.20
Растягивающаяся рамка.


6-1177335141
Strate
2007-04-23 17:32
2008.01.20
Имя домена по IP


2-1198410096
Кеша
2007-12-23 14:41
2008.01.20
Запрет на запуск уже открытой программы