У меня есть схема с одной таблицей с большинством данных, customer
и тремя другими таблицами с ссылками на внешние ключи customer.entry_id
, которая является полем BIGSERIAL
. Три другие таблицы называются location
, devices
и urls
, где мы храним различные данные, относящиеся к определенной записи в таблице клиентов.Разбиение таблицы Postgres со звездообразной схемой
Я хочу разбить таблицу клиентов на ежемесячные дочерние таблицы и выполнить эту часть; customer
будет оставаться как есть, каждый месяц будет иметь таблицу customer_YYYY_MM
, которая наследует от основной таблицы с правом CHECK
ограничение и индексы будут созданы на каждой отдельной дочерней таблице. Данные будут перемещены в правильные дочерние таблицы, а основная таблица останется пустой.
Мой вопрос касается других трех таблиц, так как я хочу их разбить. Однако у них нет информации о дате (вообще), только ссылка на первичный ключ из главной таблицы. Как настроить ограничения для этих таблиц? Является ли это даже значимым или возможным без указания даты?
Моя логика приложения знает, куда вставить все данные (это довольно тривиально), но я ожидаю, что смогу выполнить простые запросы SELECT, не указав, с каких дочерних таблиц его получить. Поэтому это должно работать так, как вы ожидали бы из несегментированных таблиц:
SELECT l.*
FROM customer c
JOIN location l USING entry_id
WHERE c.date_field > '2015-01-01'
Проблема заключается в том, что ссылка ключ не имеет определенную границу - я не могу сделать таблицы заранее и потому, что данные не всегда в порядке, я мог бы данные из 31 января, данные с 1 февраля, а затем данные от 31 января, приводящие к нестандартным первичным ключам. По этой причине я предпочел бы разделять по датам, что, скорее всего, произойдет (добавив поле даты в «внешние» таблицы). –