Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.47 MB
Время: 0.057 c
1-1192652861
cadmy
2007-10-18 00:27
2008.01.20
реакция на клавиши в свернутой программе


2-1197660955
NaRuTo
2007-12-14 22:35
2008.01.20
Уменьшение ресурсов!


2-1198174004
Stepper
2007-12-20 21:06
2008.01.20
Как при сохранении данных из RichEdit - добавить к ним строку..


15-1197447528
wsv
2007-12-12 11:18
2008.01.20
Без реестра и INI файлов


15-1197647031
Kerk
2007-12-14 18:43
2008.01.20
Мотивация





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский