DB / Entity Entwurf: Tabelle einen von mehreren Tabellen verknüpft
-
03-07-2019 - |
Frage
Bericht können mehrere Diagramme haben. Die Übersicht Tabelle sieht wie folgt aus:
- Übersicht - Id ChartID ReportID , ...
Die ChartID oben können zur Karte der ChartID entweder ein der folgenden Diagrammtypen:
- Line : ChartID Stärke yaxis XAxis Farbe , ...
- Pie : ChartID Radius Farbe , ...
- Bar : ChartID Breite Farbe Border , .. .
Ich bin mit SQL Server und unglücklicherweise alternative Lösungen wie mit CouchDB etc. sind nicht tragfähige Optionen. Ich beabsichtige auch diese Tabellen Einheiten mit Entity Framework abzubilden.
Dieser Entwurf ist mein erster Stich, und ich sehe mehrere Probleme mit diesem Entwurf:
- Übersicht . ReportID kann kein Fremdschlüssel auf mehreren Tabellen sein, so ein FK Durchsetzung ist ein Problem.
- Wenn Sie eine SQL (Oder Linq) Abfrage ausgeführt wird, werde ich tun müssen, um entweder zu laufen zwei Abfragen den Diagrammtyp zu bekommen und dann die Tabelle abzufragen. Oder ich werde eine laufen müssen beitreten gegen alle Tabellen, die die Kartendaten zu erhalten.
- Wenn dabei eine Verknüpfung gegen die Chart-Typen, die ChartID über diese Tabellen eindeutig sein müssen, so Diagramm . ChartID Karten nur eine von Line . ChartID oder Bar . ChartID oder Pie . ChartID .
- Mapping dies mit EF wird schwierig sein.
Ich könnte mir vorstellen, dies ein gemeinsames Problem genug ist, dass es Lösungen sind vorgeschrieben und etablierten Möglichkeiten, es zu behandeln.
Bin ich auf dem richtigen Weg mit dem Design? Und wenn ja, wie die oben genannten Probleme zu überwinden (FK, verbindet sie, eindeutige ID auf mehreren Tabellen und Abbildung).
Lösung
Die beantworten ist recht umfassend über die Strategien. Und SQL-Team Artikel über Implementierung Tabelle Vererbung in SQL Server hat mich, wo ich wollte.
Lösung
Haben Sie darüber nachgedacht, die Charts in der gleichen Tabelle setzen und mit einer Tabelle pro Hierarchie Vererbung Muster? Der Link dorthin zeigt, wie dies in Entity Framework implementieren. Unabhängig davon, ob es ist lebensfähig, hängt, wie unterschiedlich all diese Diagrammtypen sein wird und wie viele Felder die jeweils benötigen.
Es gibt auch Tabelle pro Typ Erbe, das mehr ähnlich ist zu dem, was Sie bereits zu beschreiben.
Andere Tipps
würde ich angehen dies mit einem Tabellenvererbungsschema:
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')
Sie ein Diagramm hinzuzufügen, fügen Sie zuerst auf den „Basis“ Kartentisch, und dann auf den entsprechenden „Subtyp“ Kartentisch. Die Check-Einschränkungen halten alles im Einklang.
Liniendiagramme. Kreisdiagramme und Balkendiagramme sind spezielle Formen der Charts.
Lookup „Generalisierung Spezialisierung relationale Modellierung“ für gute Artikel zu diesem Muster.
Oder ich werde eine Verknüpfung laufen haben gegen alle Tabellen, um die Kartendaten zu erhalten.
Ja, und das ist in Ordnung.