Ich erstelle eine Inventardatenbank, in der IT-Hardware wie Desktop-Computer, Laptops, Switches, Router, Mobiltelefone usw. gespeichert ist. Ich verwende ein Supertyp- / Subtyp-Muster, bei dem alle Geräte in einer einzigen Tabelle gespeichert sind, sowie spezifische Informationen wird in Subtyp-Tabellen abgelegt. Mein Dilemma besteht darin, zwischen den folgenden zwei Designs zu wählen:
Im oberen Diagramm haben alle Geräte gemeinsame Untertypen. Beispielsweise verfügen Desktop-Computer und Laptops über Datensätze in den folgenden Tabellen: Gerät, NetworkDevice. Ein Switch hätte Datensätze in: Device, NetworkDevice. Ein Router hätte Datensätze in: Device, NetworkDevice, WANDevice. Jedes Gerät, für das wir den Standort verfolgen, hat einen Datensatz im Standort. Einige Vor- und Nachteile, an die ich bei diesem Setup gedacht habe:
- Pro: Das Auswählen von Datensätzen basierend auf einem gemeinsamen Feld wie Hostname oder LocationID ist einfacher.
- Pro: Keine Nullfelder.
- Con: Tabellen, die in CRUD-Operationen für ein bestimmtes Gerät enthalten sein sollten, sind nicht offensichtlich und können zukünftige Datenbankadministratoren verwirren.
Im unteren Diagramm haben alle Geräte ihren eigenen Subtyp (Es gibt weitere Geräteklassen, die hier nicht angezeigt werden). In dieser Situation ist es offensichtlich, in welche Tabellendatensätze eingefügt oder aus diesen ausgewählt wird. Desktop-Computer und Laptops sind in Computer usw. enthalten. Einige Vor- und Nachteile, an die ich bei diesem Setup gedacht habe:
- Pro: Es ist sofort klar, welche Tabellen für CRUD-Operationen für Subtypen verwendet werden sollen.
- Pro: Für CRUD-Operationen muss nur eine Tabelle verwendet werden.
- Con: Um SELECT-Datensätze basierend auf gemeinsamen Subtypfeldern auszuwählen, müssen alle Tabellen kombiniert werden, z. B. die Suche nach Hostname oder LocationID.
In beiden Situationen wird das ClassDiscriminator-Feld in Subtyp-Tabellen platziert, um mit einer CHECK-Einschränkung zu steuern, welche Typen eingefügt werden können.
Gibt es Empfehlungen, für welche das Design besser ist, oder ist es völlig Ansichtssache und hängt vom beabsichtigten Zweck der Datenbank ab?
EDIT: Eine spezielle Frage, die ich bezüglich der Überlappung der Tabelle "NetworkDevice" habe. Diese Tabelle enthält Netzwerkinformationen für alle Geräte mit einem Hostnamen und / oder einer IP-Adresse, unabhängig davon, ob es sich um einen Computer, einen Switch oder einen Router handelt. Ist die Überlappung dieser Tabelle etwas, das Probleme verursachen könnte, oder ist es in Ordnung, sie auf diese Weise zu implementieren?
Vielen Dank im Voraus für jede Eingabe. Bitte fragen Sie, ob zusätzliche Informationen benötigt werden.