Дизайн базы данных / Объекта:таблица, связанная с любой из нескольких таблиц
-
03-07-2019 - |
Вопрос
A Сообщить может иметь несколько диаграмм.Тот Самый Диаграмма таблица выглядит следующим образом:
- Диаграмма -- ID, Диаграмма, Отчетид, ...
Тот Самый Диаграмма приведенное выше можно сопоставить с Диаграмма либо к тому , либо к другому один из следующих Типов диаграмм:
- Линия: Диаграмма, Толщина, ЯКсис, Ось, Цвет, ...
- Пирог: Диаграмма, Радиус действия, Цвет, ...
- Бар: Диаграмма, Ширина, Цвет, Граница, ...
Я использую SQL Server, и, к сожалению, альтернативные решения, такие как использование CouchDB и т.д., Не являются жизнеспособными вариантами.Я также намерен сопоставить эти таблицы с объектами, используя Entity Framework.
Этот дизайн - мой первый опыт, и я вижу множество проблем с этим дизайном:
- Диаграмма.Отчетид не может быть внешнего ключа в нескольких таблицах, поэтому принудительное использование FK является проблемой.
- При выполнении запроса SQL (или Linq) мне нужно будет либо выполнить два запроса, чтобы получить тип диаграммы, а затем запросить эту таблицу.Или мне придется запустить Присоединиться сопоставьте все таблицы, чтобы получить данные диаграммы.
- При выполнении соединения с Типами диаграмм Диаграмма все эти таблицы должны быть уникальными, поэтому Диаграмма.Диаграмма сопоставляется только с одним из Линия.Диаграмма или Бар.Диаграмма или Пирог.Диаграмма.
- Сопоставление этого с 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')
Чтобы добавить диаграмму, вы сначала добавляете ее в "базовую" таблицу диаграмм, а затем в соответствующую таблицу диаграмм "подтипов".Ограничения проверки поддерживают все в соответствии.
Линейные диаграммы.круговые диаграммы и столбчатые диаграммы - это специализированные формы диаграмм.
Найдите хорошие статьи по этому шаблону в разделе "обобщение специализации реляционного моделирования".
Или мне придется выполнить объединение против всех таблиц, чтобы получить данные диаграммы.
Да, и это прекрасно.