Mysql
 sql >> Base de données >  >> RDS >> Mysql

Stocker un tableau de longueur inconnue

Si vous vous trouvez dans une situation où vous commencez à avoir column1 , column2 sur la table - il y a de fortes chances que votre conception soit défectueuse, et vous devriez plutôt créer une table séparée - où chaque columnX obtient sa propre ligne. Il est (presque) toujours préférable d'avoir une table séparée si vous vous retrouvez avec plusieurs colonnes répétitives sur la même table.

De cette façon, vous évitez de stocker des valeurs séparées par des virgules dans des colonnes, vous évitez de casser votre code/requêtes si vous devez soudainement introduire une autre valeur column{X+1} - et à la place peut avoir autant ou aussi peu de valeurs d'entrée que vous le souhaitez.

Pour vous, ce serait quelque chose comme une nouvelle table appelée land_owner_input , où vous avez la valeur (que vous mettriez dans columnX ) et une référence à la ligne dans land_owner auquel appartient la valeur.

Le modèle de conception typique serait quelque chose comme ça.

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

N'oubliez pas que votre land_owner_id dans la nouvelle table doit être exactement du même type et de la même taille que l'ID auquel il fait référence.

Vous pouvez également créer une contrainte de clé étrangère entre le land_owner_id et l'identifiant du land_owner tableau pour assurer l'intégrité des données.

Une fois que vous avez votre nouvelle table, vous pouvez les interroger ensemble en utilisant un LEFT JOIN (ou un JOIN normal si vous souhaitez uniquement renvoyer des lignes si elles ont des valeurs d'entrée).

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