Существует определенный логический смысл хранить все, что связано с таблицей, в одном файле - определения столбцов, ключи, индексы, триггеры и т. Д. Если вам никогда не придется перестраивать очень большую базу данных из SQL, это будет работать нормально практически для всех время. Несколько раз это не работает, вероятно, не стоит менять процесс хранения всех связанных вещей в одном файле.
Но если вам нужно перестроить очень большую базу данных, или если вам нужно переместить базу данных на другой сервер для тестирования, или если вы просто хотите покопаться в вещах, имеет смысл разделить вещи. В PostgreSQL мы разбиваем вещи так. Все эти файлы находятся под контролем версий.
- Все операторы CREATE DOMAIN в одном файле.
- Каждый оператор CREATE TABLE в отдельном файле. Этот файл включает в себя все ограничения, кроме ограничений FOREIGN KEY, выраженных в виде операторов ALTER TABLE. (Подробнее об этом чуть позже.)
- Ограничения FOREIGN KEY каждой таблицы в отдельном файле.
- Индексы каждой таблицы для неключевых столбцов в отдельном файле.
- Триггеры каждой таблицы в отдельном файле. (Если в таблице три триггера, все три идут в одном файле.)
- Данные каждой таблицы в отдельном файле. (Только для таблиц, загруженных до перевода базы данных в оперативный режим.)
- Правила каждой таблицы в отдельном файле.
- Каждая функция в отдельном файле. (Функции являются эквивалентом PostgreSQL для хранимых процедур.)
Без ограничений внешнего ключа мы можем загружать таблицы в любом порядке. После загрузки таблиц мы можем запустить один скрипт, чтобы перестроить все внешние ключи. Makefile заботится о связывании правильных отдельных файлов вместе. (Поскольку это отдельные файлы, мы можем запускать их по отдельности, если захотим.)
Таблицы загружаются быстрее, если у них нет ограничений. Я сказал, что мы помещаем каждый оператор CREATE TABLE в отдельный файл. Файл включает в себя все ограничения, кроме ограничений FOREIGN KEY, выраженных в виде операторов ALTER TABLE. Вы можете использовать потоковый редактор sed
, чтобы разбить эти файлы на две части. Один кусок имеет определения столбцов; другая часть имеет все операторы «ALTER TABLE ADD CONSTRAINT». Makefile заботится о разбиении исходных файлов и их объединении - все определения таблиц в одном файле SQL и все операторы ALTER TABLE в другом. Затем мы можем запустить один сценарий, чтобы создать все таблицы, загрузить таблицы, а затем запустить один сценарий, чтобы перестроить все ограничения.
make
твой друг.