Дизайн базы данных / Объекта:таблица, связанная с любой из нескольких таблиц

StackOverflow https://stackoverflow.com/questions/803905

Вопрос

A Сообщить может иметь несколько диаграмм.Тот Самый Диаграмма таблица выглядит следующим образом:

  • Диаграмма -- ID, Диаграмма, Отчетид, ...

Тот Самый Диаграмма приведенное выше можно сопоставить с Диаграмма либо к тому , либо к другому один из следующих Типов диаграмм:

  • Линия: Диаграмма, Толщина, ЯКсис, Ось, Цвет, ...
  • Пирог: Диаграмма, Радиус действия, Цвет, ...
  • Бар: Диаграмма, Ширина, Цвет, Граница, ...

Я использую SQL Server, и, к сожалению, альтернативные решения, такие как использование CouchDB и т.д., Не являются жизнеспособными вариантами.Я также намерен сопоставить эти таблицы с объектами, используя Entity Framework.

Этот дизайн - мой первый опыт, и я вижу множество проблем с этим дизайном:

  1. Диаграмма.Отчетид не может быть внешнего ключа в нескольких таблицах, поэтому принудительное использование FK является проблемой.
  2. При выполнении запроса SQL (или Linq) мне нужно будет либо выполнить два запроса, чтобы получить тип диаграммы, а затем запросить эту таблицу.Или мне придется запустить Присоединиться сопоставьте все таблицы, чтобы получить данные диаграммы.
  3. При выполнении соединения с Типами диаграмм Диаграмма все эти таблицы должны быть уникальными, поэтому Диаграмма.Диаграмма сопоставляется только с одним из Линия.Диаграмма или Бар.Диаграмма или Пирог.Диаграмма.
  4. Сопоставление этого с EF будет непростым делом.

Я бы предположил, что это достаточно распространенная проблема, для решения которой существуют предписанные решения и устоявшиеся способы решения.

нахожусь ли я на правильном пути с дизайном?И если да, то как преодолеть вышеуказанные проблемы (FK, объединение, уникальный идентификатор в нескольких таблицах и сопоставление).

Решение

Это ответ достаточно исчерпывающе описывает стратегии.И статья команды SQL о реализация наследования таблиц в SQL Server привел меня туда, куда я хотел.

Это было полезно?

Решение

Рассматривали ли вы возможность размещения диаграмм в одной таблице и использования Таблица наследования иерархии закономерность?Ссылка там показывает, как реализовать это в Entity Framework.Жизнеспособна она или нет, зависит от того, насколько разными будут все эти типы диаграмм и сколько полей потребуется для каждого из них.

Существует также Таблица для каждого типа наследование, которое больше похоже на то, что вы уже описываете.

Другие советы

Я бы решил это с помощью схемы наследования таблиц:

Chart (ChartId, ChartTypeId)
   PK (ChartId, ChartTypeId)
   CHECK ChartTypeId IN ('Line', 'Bar', 'Pie')

LineChart (ChartId, ChartTypeId)
   PK (ChartId, ChartTypeId)
   FK (ChartId, ChartTypeId) -> Chart
   CHECK ChartTypeId IN ('Line')

Чтобы добавить диаграмму, вы сначала добавляете ее в "базовую" таблицу диаграмм, а затем в соответствующую таблицу диаграмм "подтипов".Ограничения проверки поддерживают все в соответствии.

Линейные диаграммы.круговые диаграммы и столбчатые диаграммы - это специализированные формы диаграмм.

Найдите хорошие статьи по этому шаблону в разделе "обобщение специализации реляционного моделирования".

Или мне придется выполнить объединение против всех таблиц, чтобы получить данные диаграммы.

Да, и это прекрасно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top