Tabella con 2 colonne che sono chiavi esterne. Solo uno può essere impostato per ogni record

1

Ho una tabella che è connessa con 2 altre tabelle in questo modo:

Tabella principale

ID_1                    | ID_2
//Foreign key of table1  //Foreign key of table2

Tabella 1

ID                   | Some information |More information
//connected with ID_1

Tabella 2

ID                   | Some information | More information
//connected with ID_2

Quindi nella tabella principale è possibile impostare ID_1 o ID_2 , ma non entrambi. Il modo in cui è ora (2 chiavi esterne) non funziona perché sono opzionali.

Quali sarebbero le mie opzioni qui?

So che posso dividerlo fino a 2 tavoli, ma non è così che lo voglio.

Devo renderli in grado di essere NULL?

    
posta Loko 11.08.2015 - 10:33
fonte

1 risposta

2

È possibile invertire la direzione della chiave: avere Table1 e Table2 contengono ciascuna una colonna che fa riferimento alla tabella principale e rende questi valori non nullable. Ciò impone l'integrità referenziale che si desidera, al costo di rendere le query un po 'più difficili perché non è possibile iniziare dalla tabella principale per eseguire una query. Non impossibile, ma qualcosa su cui riflettere.

Questo è in realtà un problema abbastanza comune nei framework ORM per quanto riguarda la mappatura dell'ereditarietà. Le soluzioni spesso equivalgono a non applicare i vincoli sul database e invece a lasciarlo al codice dell'applicazione per applicare queste regole come compromesso. Cerca "tabella per tipo" rispetto a "tabella per gerarchia" rispetto a "tabella per classe".

    
risposta data 11.08.2015 - 12:02
fonte

Leggi altre domande sui tag