Sto lavorando a un programma in cui è possibile registrare i reclami. Esistono tre tipi di reclami: internal
(errori dei dipendenti), external
(errori di un'altra azienda) e supplier
(errori commessi da un fornitore). Contengono dati diversi che non possono essere condivisi. Al momento ho 4 tavoli (reclamo, dipendente, azienda e fornitore). Ecco una visualizzazione delle tabelle:Come si applicano i sottotipi in un database SQL Server?
Ho una conoscenza di base dei sottotipi ma non riesco a convertirli da un ERD in un vero database SQL Server, o almeno in questo scenario. Questo è più o meno come i 4 tavoli guardano (attributi irrilevanti omessi):
Reclamo
ComplaintId PK
dipendenti
EmployeeId PK
EmployeeName
impresa
CompanyID PK
CompanyName
Fornitore
IDFornitore PK
SupplierName
Quando si registra un reclamo, l'errore è fatto da uno dei 3 tipi e tutti memorizzare informazioni diverse. Qual è il modo migliore per memorizzare le informazioni in questo caso? Ho pensato di inserire 2 discriminatori nella tabella dei reclami: ComplaintType
e Id
in modo da poter indicare a quale tabella controllare e quale ID mi serve, ma non è molto pulito né efficiente.
Si prega di assistere.
Grazie per il suggerimento; Starò sicuramente lontano dal metodo dei 2 discriminatori. Ho anche provato il metodo a 3 colonne ma non ancora con alcun tipo di vincolo. È possibile forzare almeno uno dei campi a non essere nullo? Se sì, come lo faresti? – Fusyion
Ho scelto di accettare la risposta come 'la risposta' perché è informativo e ho scelto la prima opzione per far funzionare le cose. – Fusyion
@ Mario Non vedo come una colonna ComplaintType e tre tabelle separate sarebbero un problema. Ciascuna delle tabelle figlio contiene una chiave esterna per la tabella padre. Vedere questo violino: http://sqlfiddle.com/#!3/6118b6/2 L'unico problema è che si potrebbe fare riferimento Parent sbagliato, il genitore di tipo incorect. Ma questo può essere risolto con un'introduzione di un ulteriore vincolo ed estensione delle chiavi esterne.Vedi questo violino: http://sqlfiddle.com/#!3/58cd0/1 Ma, come SQL Server spreca spazio nella memorizzazione di colonne Null vorrei andare con ine grande tabella per tutti i tipi e memorizzare valori nulli in colonne dove non applicabile. – Anderson