#наследование #архитектура #база_данных #postgresql
PostgreSQL реализует наследование таблиц. К примеру, можно создать таблицу places (географические объекты) и несколько таблиц, которые будут наследовать все ее колонки. Допустим, это будут таблицы для информации о городах (cities), реках (rivers) и озерах (lakes): CREATE TABLE places (id, name, latitude, longitude, altitude); CREATE TABLE cities (population) INHERITS (places); CREATE TABLE rivers (lenght) INHERITS (places); CREATE TABLE lakes (maxdepth, volume) INHERITS (places); Теперь допустим, что мы хотим хранить в базе данных информацию книгах, посвященных этим объектам. Взаимоотношение между объектом и книгами - один-к-многим. Как это можно сделать, если у нас данные фактически находятся в таблицах-потомках и при этом уникальность ключей действует только в пределах одной таблицы? UPD. Никак. Такая логика работы в PostgreSQL не предполагается.
Ответы
Ответ 1
Как вариант — не использовать наследование и перейти к традиционному cities (place_id REFERENCES places.id, population) и выборке с JOIN'ами. Менее красиво-удобно, зато быстро и надежно. Как другой вариант — раз PostgreSQL не хочет обеспечивать целостность ключами, то обеспечить целостность триггерами или правилами. Можно использовать наследование, но вставки и обновления будут медленнее.Ответ 2
Ну триггеры/ключи можно использовать, конечно, для проверки целостности, либо можно партицировать таблицу с книгами, повесив в качестве check, например, непересечение по жанру. Соответственно, внешние ключи можно назначить от партиции к партиции. Здесь на русском можно про наследование таблиц немного почитать еще
Комментариев нет:
Отправить комментарий