Я хочу представить новую «родительскую» концепцию в модели моего Rails-приложения.
У меня уже есть таблицы taskA
и taskB
, в которых хранятся данные о задачах разных типов. taskA
и taskB
имеют много различий, но имеют некоторые общие свойства. Теперь я хочу представить другую модель, taskParent
, которая будет содержать копию общих данных для более быстрого поиска и иметь ссылку на taskA
или taskB
. taskParent
будет иметь свою таблицу. На данный момент мое приложение будет только читать данные из taskParent
, в то время как все записи будут выполняться для дочерних таблиц.
Из таблицы taskParent
как мне ссылаться на taskA
или taskB
? Кажется, у меня есть два варианта:
A) Один type
и один id
столбец.
Pro : легко поддерживать новые типы задач, если в будущем я представлю другие таблицы для различных типов задач
Минусы : сложно поддерживать ссылочную целостность, поскольку ее нельзя реализовать на уровне базы данных с помощью внешних ключей (насколько я знаю)
B) Один столбец для каждой дочерней таблицы с ограничением внешнего ключа и ограничением db, обеспечивающим установку только одного внешнего ключа
Pro : проще обеспечить ссылочную целостность. Может автоматически удалить элемент из taskParent
, если связанные taskA
или taskB
удалены.
Минусы : трудно поддерживать другие типы задач, поскольку для этого потребуется добавить дополнительные столбцы в таблицу и изменить ограничение БД, обеспечивающее уникальность
Мне бы очень хотелось иметь ограничения на уровне БД, но минусы подхода B пугают меня, поскольку вполне возможно, что я добавлю другие типы задач (и их соответствующие таблицы) в будущем. У кого-нибудь есть предложения по поводу того, какой подход выбрать?
Я использую Postgres.