Sto creando un database di inventario che memorizza l'hardware IT, come computer desktop, laptop, switch, router, telefoni cellulari, ecc. Sto usando il modello supertipo / sottotipo, in cui tutti i dispositivi sono memorizzati in una singola tabella e informazioni specifiche viene inserito nelle tabelle dei sottotipi. Il mio dilemma è scegliere tra i seguenti due design:
Nel diagramma in alto tutti i dispositivi condividono sottotipi comuni. Ad esempio, i computer desktop e portatili presenterebbero record nelle seguenti tabelle: Dispositivo, NetworkDevice. Uno switch avrebbe record in: Device, NetworkDevice. Un router avrebbe record in: Dispositivo, NetworkDevice, WANDevice. Qualsiasi dispositivo per il quale tracciamo la posizione avrà un record in Posizione. Alcuni pro e contro che ho pensato per questa configurazione:
- Pro: SELEZIONARE i record in base a un campo comune, come Nome host o LocationID è più semplice.
- Pro: nessun campo nullo.
- Contro: le tabelle che dovrebbero essere incluse nelle operazioni CRUD per un determinato dispositivo non sono ovvie e potrebbero confondere i DBA futuri.
Nel diagramma in basso tutti i dispositivi hanno il proprio sottotipo (ci sono più classi di dispositivi che non sono mostrate qui). In questa situazione, è ovvio da quali record di tabelle vengono inseriti o selezionati. Computer desktop e laptop vanno in Computer, ecc. Alcuni pro e contro che ho pensato per questa configurazione:
- Pro: è immediatamente ovvio quali tabelle utilizzare per le operazioni CRUD per i sottotipi.
- Pro: utilizzare solo una tabella per le operazioni CRUD.
- Contro: SELEZIONARE i record in base ai campi dei sottotipi comuni richiede la combinazione di tutte le tabelle, ad esempio la ricerca per nome host o LocationID.
In entrambe le situazioni, il campo ClassDiscriminator viene inserito nelle tabelle dei sottotipi per l'uso con un vincolo CHECK per controllare quali tipi possono essere inseriti.
Ci sono raccomandazioni per quale design è migliore o è completamente una questione di opinione e dipende dallo scopo previsto del database?
EDIT: una domanda specifica che ho riguarda la natura sovrapposta della tabella "NetworkDevice". Questa tabella è destinata a contenere le informazioni di rete per qualsiasi dispositivo con un nome host e / o un indirizzo IP, sia esso un computer, uno switch o un router. La natura sovrapposta di questa tabella è qualcosa che potrebbe causare problemi o va bene implementarla in questo modo?
Grazie in anticipo per qualsiasi input fornito. Si prega di chiedere se sono necessarie ulteriori informazioni.