Qual è un nome migliore per questa tabella molti-a-molti?

1

Parte di una delle mie applicazioni ha tabelle contracts e contract_types , in cui un tipo può avere molti contratti ma un contratto può essere solo di un tipo. Ora è stata introdotta una nuova ruga: un contratto può cambiare tipo nel tempo (sebbene possa, fortunatamente, essere sempre di un solo tipo alla volta).

La soluzione più semplice sembra essere quella di introdurre una nuova tabella con colonne simile a questa:

contract_id
contract_type_id
from_date
to_date

Ma come chiamare la nuova tabella? contract_type_allocations è il meglio che posso fare finora e non posso dire di essere impressionato da me stesso. Suggerimenti ricevuti con gratitudine.

    
posta Mike Woodhouse 13.07.2012 - 15:44
fonte

3 risposte

5

Hai 2 opzioni come mostrato sotto. Nell'opzione 2, i 2 FK costituiscono il PK della tabella della cronologia. Nota che se hai un caso come questo:

Contratto 1 - Tipo A

quindi cambia in:

Contratto 1 - Tipo B

Quanto sopra può essere curato con le soluzioni fornite. Ma se aggiungi una modifica extra come:

Contratto 1 - Digitare A (torna a digitare di nuovo A), la seconda soluzione fallisce! - Per evitare questo, puoi creare una chiave primaria nella tabella della cronologia che sia GUID o un numero sequenziale e non imporre univocità alla combinazione dei 2 FK.

    
risposta data 13.07.2012 - 16:27
fonte
2

Un altro modo è impostare le viste. Usa le ultime versioni nella vista in modo che si unisca con la vista può rimanere da 1 a molti mentre le tabelle di base sono molte a molte. I molti a molti possono essere usati per la cronologia se necessario (questo dipende quindi se si desidera / è necessario mantenere molti a molti / utilizzare una tabella di collegamento per dare 2 vie 1 a molti / introdurre la versione nella chiave per rendere unico / etc - a seconda dell'uso che ne fai e di quello che si unirà ad esso se necessario).

Un altro modo per andare, è avere una tabella della cronologia e spostare le righe pertinenti su quando viene cambiato il tipo di contratto. Ciò consente quindi la stessa visibilità della vista menzionata sopra, ma consente una indicizzazione più accurata (accurata nella misura in cui coincide con l'uso operativo della tabella) - la tabella della cronologia diventerà ovviamente anche molti per molti (dopo ogni secondo modificare). Questo può essere più efficiente (specialmente se ci sono molte righe sul tavolo), ma richiede più manutenzione / pre-elaborazione.

    
risposta data 13.07.2012 - 18:47
fonte
1

Questa è una sfida simile quando si creano oggetti immutabili.

L'aggiunta di versioni al contratto e / o la creazione di una tabella cronologica sono le due soluzioni più veloci.

Una colonna versione consentirebbe di lasciare le versioni precedenti delle informazioni del contratto nella stessa tabella, il che potrebbe essere vantaggioso. Potrebbe anche presentare problemi aggiungendo un eccesso se il tavolo è già grande. Ciò consentirebbe anche di tenere traccia di altre modifiche significative all'interno del contratto stesso.

Altrimenti, è abbastanza semplice impostare una tabella aggiuntiva come suggerisci. "Cronologia" o "Versione" potrebbero essere buoni nomi di tabelle alternative.

    
risposta data 13.07.2012 - 16:47
fonte

Leggi altre domande sui tag