/ / Come copiare i dati su un'altra tabella ed evitare conflitti chiave? - php, mysql, database

Come copiare i dati su un'altra tabella ed evitare conflitti chiave? - php, mysql, database

Sto costruendo un'applicazione in PHP / MySQL. Contiene 2 database. Il Database 1 viene utilizzato per memorizzare temporaneamente gli ordini dall'utente finale. Dopo che l'utente ha confermato l'ordine, verrà copiato nel database 2 in 2 tabelle con un SELECT ... INSERT. Quindi le tabelle nel database 1 verranno pulite in modo che l'utente possa procedi con un nuovo ordine. In altre parole, le tabelle nel database 1 non potranno mai contenere più di 1 ordine in qualsiasi momento. Le due tabelle contengono rispettivamente l'ordine e gli articoli corrispondenti. Le strutture della tabella sono identiche sia nel database 1 che nel database 2. Quando gli elementi appartenenti a un ordine vengono trasferiti alla tabella nel database 2, si verificherà un conflitto chiave.

Domanda 1: Qual è il modo migliore per risolvere questo conflitto chiave?

Ho provato a selezionare le colonne esplicitamente tranneper la chiave, ma questo non risolve completamente il problema. Sarebbe bello usare una query INSERT INTO db2.table (SELECT * FROM db1.table) per trasferire questi dati invece di dover menzionare tutte le colonne esplicitamente.

Inoltre, quando l'utente vuole modificare la correnteregistrare subito dopo essere stato scaricato nel database 2, non è possibile perché le tabelle nel database 1 e nel database 2 non possono essere collegate. Inoltre, il record può essere INSERITO due volte nel database 2.

Domanda 2: Come può l'utente modificare ancora il record corrente senza dover uscire dal menu e cercare il record nelle tabelle del database 2?

Domanda 3: Come posso evitare di INSERIRE lo stesso record due volte nelle tabelle nel database 2?

Questo progetto con 2 database è stato scelto perchédell'approccio modulare del progetto. Inoltre, il database 2 è separato dal database 1, il che significa che non possono interferire. E, dal momento che il database è diviso in 2 parti, è più facile programmare due piccoli blocchi piuttosto che 1 grosso pezzo.

risposte:

0 per risposta № 1

Avere 2 database non è una cattiva idea.

Mi avvicinerei a questo con la "chiave straniera"relazione tra il concetto di 2 tavoli. Quando inserisci tutti i contenuti del record db1 in db2, aggiungi un nuovo campo "foreign key" a db2 (db2_fkey) contenente la "chiave primaria" dal record db1.

In questo modo puoi leggere i record su db2 e relazionartitorna al record su db1 usando db2_fkey. Sarai in grado di determinare che il record è stato cancellato da db1. Inoltre, sarà possibile avere più di 1 record su db2 con lo stesso valore nel campo db2_fkey. Esiste l'elaborazione automatica in MySQL con una chiave esterna tra 2 tabelle che dovrai codificare manualmente con questo approccio (come eliminare i record da entrambe le tabelle), ma questo approccio alla relazione dovrebbe rispondere alle domande della tua applicazione.