Как реализовать множественное наследование таблиц в Rails: внешние ключи или тип + id? - PullRequest
0 голосов
/ 25 июня 2019

Я хочу представить новую «родительскую» концепцию в модели моего 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.

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