A Отчет может иметь несколько графиков. Таблица Chart выглядит следующим образом:
- Chart - Id , ChartId , ReportId , ...
Приведенный выше ChartId может сопоставляться с ChartId с one из следующих типов диаграмм:
- Линия : ChartId , Толщина , YAxis , XAxis , Цвет, ...
- Пирог : ChartId , Радиус , Цвет , ...
- Бар : ChartId , Ширина , Цвет , Граница , ...
Я использую SQL Server, и, к сожалению, альтернативные решения, такие как использование CouchDB и т. Д., Не являются приемлемыми вариантами. Я также намереваюсь отобразить эти таблицы на объекты, используя Entity Framework.
Этот дизайн - мой первый удар, и я вижу несколько проблем с этим дизайном:
- Диаграмма . ReportId не может быть внешним ключом для нескольких таблиц, поэтому применение FK является проблемой.
- При выполнении запроса SQL (или Linq) мне нужно будет либо выполнить два запроса, чтобы получить тип диаграммы, а затем запросить эту таблицу. Или мне нужно выполнить объединение для всех таблиц, чтобы получить данные диаграммы.
- При объединении с типами диаграмм ChartId для этих таблиц должен быть уникальным, поэтому Chart . ChartId отображается только на один из Line . ChartId или Bar . ChartId или Pie . ChartId .
- Сопоставить это с EF будет сложно.
Я полагаю, что это достаточно распространенная проблема, что существуют предписанные решения и установленные способы ее решения.
Я на правильном пути с дизайном? И если да, то как преодолеть вышеуказанные проблемы (FK, объединение, уникальный идентификатор для нескольких таблиц и сопоставление).
Решение
Этот ответ является довольно полным о стратегиях. И статья SQL Team о реализации наследования таблиц в SQL Server дала мне то, что я хотел.