Главная страница
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.02 c
9-1165649515
max3d
2006-12-09 10:31
2008.01.20
Движок проблемы с реализацией


3-1189603544
alsov
2007-09-12 17:25
2008.01.20
fastreport dbcross запрос>500000строк


1-1192990151
dreamse
2007-10-21 22:09
2008.01.20
Ускорение работы FileExists


2-1198023164
Johnnnnnn
2007-12-19 03:12
2008.01.20
Как найти последнюю пустую ячейку в столбце в Excel?


15-1197341553
Slider007
2007-12-11 05:52
2008.01.20
С днем рождения ! 11 декабря 2007 вторник