Come posso mantenere un riferimento a un insieme di valori predefiniti

3

Attualmente sto cercando di progettare meglio una struttura di database per i valori predefiniti in cui un riferimento ai valori predefiniti preimpostati viene mantenuto globalmente, ma il sistema è abbastanza flessibile da consentire l'aggiunta di nuovi valori predefiniti.

Database:

Default Fruits
----------------------------
ID:    Name:       Colour:
----------------------------
1      Apples      Green
2      Oranges     Orange
3      Bananas     Yellow



User Fruits
---------------------------------------------
UserID:    DefaultID       Name       Colour
---------------------------------------------
10         1 
10         NULL            Plums      Purple
10         2   

L'utente 10 in questo scenario genererebbe un menu a discesa di mele, prugne e arance.

Con la struttura del database di cui sopra, il mio problema è che ho bisogno di essere in grado di cambiare il colore di una mela in nero per un particolare utente, ma non di cambiarlo globalmente. Se aggiungo automaticamente i valori predefiniti per ciascun utente ai frutti degli utenti, potrei potenzialmente rimanere con i record orfani. C'è un approccio migliore alla progettazione dei DB da considerare per questo scenario o quanto sopra sembra ragionevole?

    
posta Squiggs. 01.02.2017 - 22:59
fonte

2 risposte

1

La tabella User Fruits non è carina. È ridondante contenere informazioni sui frutti in due luoghi diversi.

Se puoi modificare le impostazioni di frutta per utente, sarebbe meglio se tu avessi solo una tabella Fruits e una tabella User , e nella tabella Fruits hai avuto una chiave esterna per User table.

Tabella dei frutti

| ID | Name  | Color | UserID |
| 1  | Apple | Green | 10     |
| 2  | Pear  | Brown | 10     |

In questo modo, puoi modificare un frutto per un utente senza influenzare il resto. Forse potresti creare una stored procedure (o un metodo di applicazione) che ha popolato la tabella Fruits con valori predefiniti per un utente quando inserisci un nuovo record (o quando è il momento appropriato).

    
risposta data 02.02.2017 - 05:06
fonte
0

Il design sembra giusto. Non rimarrai con orfani se aggiungi un vincolo di chiave esterna per eliminare le righe di riferimento sull'eliminazione nel genitore.

ALTER TABLE dbo.User
   ADD CONSTRAINT FK_T1_T2_Cascade
   FOREIGN KEY (DefaultID) REFERENCES dbo.Fruits(ID) ON DELETE CASCADE
    
risposta data 02.02.2017 - 08:35
fonte

Leggi altre domande sui tag