Наследование и ограничения внешнего ключа с postgresql? - PullRequest
3 голосов
/ 09 сентября 2010

В нашем проекте мы извлекаем большую пользу из функции наследования базы данных PostgreSQL!

Мы реализуем динамическое создание схем для разных агентств.Эта структура позволяет нам решать множество проблем безопасности, которые возникают немедленно в случае групповых таблиц (без разбиения).

Единственная проблема, с которой мы столкнулись, - это гарантировать целостность базы данных, что обычно (в смыслеструктура без наследования) реализуется с помощью ограничений внешнего ключа.

Поскольку PostgreSQL имеет определенные ограничения (см. предостережения о наследовании ), мы вынуждены поддерживать структуру таблиц без ограничения.

Есть ли возможность «имитировать», даже если предположить относительное снижение производительности, ограничения внешних ключей с помощью триггеров и / или проверок?

Любые предложения очень ценятся!Спасибо.

Ответы [ 2 ]

4 голосов
/ 10 сентября 2010

Единственная проблемная ситуация - вы ссылаетесь из общей таблицы на таблицу parent.Вы можете обойти это с общей таблицей parent_ids с одним столбцом id int primary key.Вы должны будете поддерживать эту таблицу, используя триггеры на своих дочерних таблицах, но это очень просто - вставить в parent_ids при вставке, удалить из нее при удалении, обновить ее при обновлении, которое меняет id.

Тогда вместо ссылки на вашу таблицу parent вы будете ссылаться на эту таблицу parent_ids.Это обеспечит целостность ссылок и не приведет к конфликту id в 2 дочерних таблицах.

Это приведет к утечке используемых идентификаторов любому пользователю, но не позволит получить доступ к любым другим данным.

0 голосов
/ 09 сентября 2010

В большинстве случаев должна быть возможность записывать регулярные триггеры в таблицы, которые проверяют отношения при изменении данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...