Форум: "Базы";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.047 c