È buona prassi mantenere 2 tabelle correlate (usando PK auto_increment) per avere lo stesso numero massimo di ID autoincremento quando tabella1 viene modificata?

0

Questa domanda riguarda le buone pratiche di progettazione nella programmazione.

Vediamo questo esempio, abbiamo 2 tabelle correlate:

Table1
textID - text
1      - love..
2      - men...
...

Table2
rID - textID
1   - 1
2   - 2
...

Nota:

In Table1:

  • textID è la chiave primaria auto_increment

In Table2:

  • rID è auto_increment chiave primaria & textID è una chiave esterna

  • La relazione è che l'1% dirID avrà 1 e solo l'1% ditextID, ma l'1% ditextID può avere qualche% dirID.

Quindi, quando table1 ha ottenuto la modifica, table2 dovrebbe essere aggiornata di conseguenza.

Ok, ecco un esempio fittizio. Costruisci un sistema molto complicato. Quando modifichi 1 record in table1, devi tenere traccia del record correlato in table2. Per tenere traccia, puoi fare così:

Opzione 1 : quando modifichi un record in table1, proverai a modificare un record correlato nella tabella 2. Questo potrebbe essere piuttosto difficile in termini di programmazione, specialmente per un sistema molto complicato.

Opzione 2 : invece di modificare un record correlato in table2, hai deciso di eliminare il vecchio record nella tabella 2 & inserirne uno nuovo. Questo è più facile da programmare.

Ad esempio, supponiamo di utilizzare l'opzione 2, quindi quando modifichi record 1,2,3,....,100 in table1, la tabella2 avrà il seguente aspetto:

Table2
rID   - textID
101   - 1
102   - 2
...
200   - 100

Ciò significa che gli Max degli ID autoincrement nella tabella1 sono sempre gli stessi (100), ma gli Max degli ID autoincrement nella tabella2 hanno già raggiunto 200.

Cosa succede se l'utente modifica molte volte? se lo fanno, la tabella 2 potrebbe esaurire i record? possiamo usare BigInt ma che rendono l'app più lenta?

Nota: se passi del tempo a programmare per modificare i record in table2 quando table1 viene modificato, sarà molto difficile & quindi sarà soggetto a errori. Ma se cancelli il vecchio record & inserisci nuovi record in table2, quindi è molto più semplice da programmare & quindi il tuo programma è più semplice e amp; meno incline agli errori.

Quindi, è buona prassi mantenere 2 tabelle correlate (usando auto_increment PK) per avere lo stesso numero massimo di auto_increment ID quando table1 è stato modificato?

    
posta Tum 31.05.2014 - 05:39
fonte

2 risposte

1

No, non è necessario. Mentre potrebbe essere utile per sfogliare manualmente i dati, non ha alcun impatto sul programma poiché hai già il textid nella seconda colonna. Non preoccuparti di quale sia il valore della chiave auto_increment nelle tabelle. Basta guardarlo come un valore unico garantito che può essere utilizzato per identificare la riga.

    
risposta data 31.05.2014 - 08:52
fonte
0

La complessità non necessaria che stai affrontando deriva dal fatto che il tuo design non è normalizzato.

Se due entità hanno una relazione uno-a-uno, devi riconsiderare se dovrebbero essere una singola entità.

A meno che Table2 rappresenti una specializzazione di ruolo di Table1, che non sembra essere in quanto Table2 non ha altre colonne, non è necessario che siano tabelle separate.

In una progettazione normalizzata, non si presentano mai complicate strategie di aggiornamento. La normalizzazione elimina le incoerenze degli aggiornamenti.

    
risposta data 31.05.2014 - 05:53
fonte

Leggi altre domande sui tag