Предполагая, что это представление таблиц:Каков наилучший способ представления полиморфных ассоциаций в реляционной базе данных?
Объект является «родителем» таблица, которая держит ObjectIds всех остальных 4-х дочерних таблиц.
Стол «что-то», помимо столбца objectid, также будет содержать столбец linked_to_objectid. Этот столбец указывает только на objectid от object1 и object2 (а не от объекта 3).
Моя проблема заключается в том, что я буду проверять каждый раз, когда я вставляю строку, если связанный_to_objectid не из объекта3.
Другим способом было бы добавить еще один столбец в таблицу объектов, который будет описывать, какой тип объекта является объективом ... Но я чувствую, что это было бы неправильно.
Я знаю, что эта модель нарушает правила нормальной формы, но я не могу найти другие способы.
Кто-нибудь может мне помочь и найти лучший способ смоделировать это?
Это ночной способ добавить триггеры, чтобы сохранить целостность db. Это просто ночная жизнь для реализации оо-концепций в rdbms. Это можно сделать, но не эффективно. Мне не нравится хранить метаданные о таблицах в другой таблице (например, ваш класс объектов). Во всяком случае, я сохранил это просто, только суперсетевая таблица объектов, в которой хранятся все идентификаторы для всех записей таблиц. Отброшено все триггеры (слишком много указаний, сделанных вручную для удаления/обновления/вставки). Сделал несколько дополнительных таблиц ассоциации, если мне нужна некоторая обратная запись. В любом случае лучшим решением было бы oodb :). – Tudor
P.S. +1 ваш ответ хорош, но не может принять его, потому что на вопрос можно ответить по-разному в зависимости от потребностей some1. И полный ответ не будет слишком эффективным. Многие, возможно, скажут, что уходят. :) – Tudor
@TudorTudor Meh, только десять лет назад PostgreSQL получил декларативную ссылочную целостность. Я выполняю несколько триггеров для обеспечения RI, и это не так уж плохо. В любом случае DRI доставит вам большую часть пути. –