2015-03-14 5 views
0

Поскольку реляционные базы данных не поддерживают прямое наследование, а для ключей ключей можно ссылаться только на одну таблицу, мне пришлось импровизировать решение (которое я не считаю уникальным или каким-либо другим).Создание таблицы суперкласса для уменьшения суммы отношений

В моей реляционной базе данных есть сущность A, entityB1 и entityB2. Объект B1 и entityB2 представляют собой подобные объекты реальной жизни, но имеют разные номера атрибутов, например, спортивные автомобили и семейные автомобили. Говорят, что entityA может создавать отношения «BUYS» с обоими entity.Normally это может быть сделано с 2 отдельными отношениями, которые имеют внешние ключи для 2 отдельных таблиц.

Вот мое решение, я создал объект B, который имеет атрибут B_ID only.When есть запись, вставленная в entityB1 или entityB2, первичный ключ записи вставил entityB как B_ID, а также. Этот способ я пытаюсь косвенно ссылаться на entityB1 и entityB2 с одним отношением.

Можете ли вы предложить мне лучший способ, так как мне нужно будет использовать дополнительное соединение для доступа к атрибутам entityB1 и entityB2 таким образом?

ответ

0

Это распространенное заблуждение относительно супертипов/подтипов.

Суперширинка должна всегда включаться в логическую модель. Если требования к производительности конкретного приложения не могут быть выполнены, это может быть обращено на свертывание супертипа в различные подтипы в физической модели приложения. Необходимо следить за тем, чтобы в таблице подтипа не было дублирования первичных ключей, а сведенные неключевые атрибуты в физической модели правильно придерживались тех правил, которые указаны в логической модели.

Следует также обратить внимание на то, что проблема с производительностью (например, при нагрузке). Свертывание супертипов в подтипы может быть проблематичным, когда речь идет об обмене данными между несколькими приложениями/системами/предприятиями.

Другой подход к физическому моделированию заключается в объединении подтипов в супертипы. Это достигается путем определения всех атрибутов подтипа как физических только столбцов в таблице супертипа. Необходимо следить за тем, чтобы столбцы для отдельного подтипа были заполнены только и что столбцы для других подтипов остаются нулевыми.

Надеюсь, это поможет.