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% di
rID
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?