![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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", но предполагаю, дело в том, что внешний(-ие) ключ(-и) должен(-ны) быть без констрейнтов (ограничений), которые мешают что-то там добавлять...