Mysql
 sql >> Database >  >> RDS >> Mysql

Memorizzazione di un array di lunghezza sconosciuta

Se ti trovi in ​​una situazione in cui inizi ad avere column1 , column2 sul tavolo - è probabile che il tuo design stia diventando imperfetto e dovresti invece creare una tabella separata - dove ogni columnX ottiene una riga tutta sua. È (quasi) sempre meglio avere una tabella separata se ti ritrovi ad avere più colonne ripetute sulla stessa tabella.

In questo modo, eviti di memorizzare valori separati da virgole nelle colonne, eviti di interrompere il tuo codice/query se improvvisamente devi inserire un altro valore column{X+1} - e invece può avere tutti i valori di input necessari.

Per te, sarebbe qualcosa come una nuova tabella chiamata land_owner_input , dove hai il valore (che inseriresti in columnX ) e un riferimento alla riga in land_owner a cui appartiene il valore.

Il modello di progettazione tipico sarebbe qualcosa del genere.

CREATE TABLE land_owner_input (
    land_owner_input_id INT(11) AUTO_INCREMENT
    land_owner_id INT(11), 
    land_owner_input_value VARCHAR(MAX)
);

Tieni presente che il tuo land_owner_id nella nuova tabella dovrebbe essere esattamente dello stesso tipo e dimensione dell'ID a cui fa riferimento.

Puoi anche creare un vincolo di chiave esterna tra land_owner_id e l'ID del land_owner tabella per garantire l'integrità dei dati.

Una volta che hai la tua nuova tabella, puoi interrogarli insieme usando un LEFT JOIN (o un normale JOIN se vuoi restituire solo righe se ha valori di input).

SELECT *
FROM land_owner AS lo
LEFT JOIN land_owner_input AS loi
    ON loi.land_owner_id = lo.land_owner_id