Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
jeth
Зарегистрирован: 04.02.2005 Сообщения: 2 Откуда: Пермь-Москва
|
Добавлено: Пт Фев 04 2005 12:26 Заголовок сообщения: Уникальность первичного ключа внутри трех таблиц |
|
|
Обращаюсь к Вашему опыту, господа и дамы, разработчики БД!
Проблема в следующем: имеется три таблицы (СУБД PostgreSQL), возникла необходимость, чтобы первичные ключи этих таблиц непересекались по значению, т.е. уникальность их первичных ключей была не только в своей таблице, но и в двух остальных. Т.е. получается, как бы один первичный ключ на три таблицы. Какие есть способы реализации этого на уровне СУБД? Желательно "законные". "Обходным путем" можно завести последовательность и при каждом insert насильно присваивать полям таблицы ее значение... Может у кого-нибудь будут другие идеи?
И еще один вопрос: само возникновение такой пролемы не говорит о неверном проектировании структуры? Кто-нибудь сталкивался с подобным?
Заранее благодарен!
Дмитрий. |
|
Вернуться к началу |
|
|
dr_brick
Зарегистрирован: 03.02.2005 Сообщения: 8 Откуда: Москва
|
Добавлено: Пт Фев 04 2005 16:39 Заголовок сообщения: Re: Уникальность первичного ключа внутри трех таблиц |
|
|
с PostgreSQL к сожалению не работал
1. в interbase это легко реализуется с помощью генератора и хранимой процедуры (очень удобный механизм), если же в PostgreSQL генераторов (или подобного) нет, то можно:
2. попробовать создать ещё одно поле значение котороо для каждой таблицы задавать как (Primary key)*3 + n, где n=0..2 - номер соответствующей таблицы (не самое наверное красивое решение и работать будет только если при вставке уже известно значение ключевого поля - т.е. надо проверять)
3. а может - просто добавить поле с номером таблицы и внешние все связи осуществлять по двум полям (но соответсвенно эти два поля должны быть во всех подчинённых таблицах и во всех запросах)
а насчёт неверно спроектированной структуры - вполне вероятно хотя это зависит от конкректной задачи |
|
Вернуться к началу |
|
|
jeth
Зарегистрирован: 04.02.2005 Сообщения: 2 Откуда: Пермь-Москва
|
Добавлено: Пт Фев 04 2005 16:52 Заголовок сообщения: |
|
|
Спасибо, dr_brick!
Я решил проблему средствами PostgreSQL: там есть понятие последовательности, через которые СУБД автоматически реализует все первичные ключи. Я завел последовательность и насильно прикрутил ее ко всем первичным ключам этих трех таблиц. Решение сработало!
Дмитрий. |
|
Вернуться к началу |
|
|
|