2

2 части вопрос:отношение базы данных многих таблиц и представлению в рамках сущности

первого Каков наилучший способ настройки таблицы структура/отношения дали следующий сценарий: У меня есть несколько таблиц, которые хранят различные виды данных (то есть: книги, фильмы, журналы - каждая в виде разных таблиц), а затем одна таблица, в которой хранятся обзоры, которые могут ссылаться на любой из типов таблиц. Таким образом, строка в таблице обзора может ссылаться на таблицу книг или журналов.

Как у меня сейчас есть 3-я таблица, которая определяет доступные таблицы и дает им идентификационный номер. В результате заканчивается отсутствие истинных отношений, которые хранятся в «Обзорах книг». Это лучший способ сделать это?

Как представить фальшивые отношения в Entity Framework? Я могу сделать запрос, который присоединился бы к 3 таблицам, но есть ли способ его моделирования в сопоставлении таблиц?

ответ

2

Другой способ думать об этом - считать КНИГИ, ФИЛЬМЫ, ЖУРНАЛЫ в качестве подтипов REVIEWABLE_ITEMS. Вероятно, они имеют некоторые общие характеристики - не зная больше о вашей проблемной области, было бы трудно быть уверенным. Преимущество этого подхода заключается в том, что вы можете моделировать REVIEWS как зависимость от REVIEWABLE_ITEMS, предоставляя вам как одну таблицу для Обзоров , так и обязательную взаимосвязь.

редактировать

Да, это так же, как расширение типов в парадигме OO. Вы не говорите, какой вкус базы данных вы собираетесь использовать, но this article by Joe Celko показывает, как это сделать в SQL Server. Точно такая же реализация работает в Oracle, и я ожидаю, что она будет работать и в большинстве других продуктов RDBMS.

+0

Итак, это было бы похоже на создание базового класса для reviewable_items и расширение его для книг и фильмов? –

1

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

Я бы использовал один стол для каждого вида открывания: один для книг, один для фильмов и т. Д. С отношением «один ко многим» для каждого из них (между книгами и книжными обзорами, фильмами и обзорами фильмов и т. Д.). Если вам нужны все обзоры в одной таблице, создайте представление, которое будет выбирать все обзоры с помощью UNION ALL.

0

Либо вы включаете понятие «обзорный», которое может быть либо книгой, либо журналом или ..., и к которым могут относиться «обзоры», либо вы можете иметь концепцию «обзор», которая может либо быть «книжным обзором», который может ссылаться на книгу, или «обзор журнала», который может ссылаться на журнал, или «газетный обзор», который может ссылаться на газету, ...

Поскольку действительно реляционных систем не существует , вы не можете обойтись без выделения одной из этих двух абстракций в своем проекте базы данных. (Если, возможно, если вы захотите реализовать множество триггерного кода.)