sql >> Base de Datos >  >> RDS >> Mysql

Almacenar una matriz de longitud desconocida

Si te encuentras en una situación en la que empiezas a tener column1 , column2 en la mesa:lo más probable es que su diseño tenga fallas y, en su lugar, debe crear una tabla separada, donde cada columnX obtiene una fila propia. Es (casi) siempre mejor tener una tabla separada si tiene varias columnas repetidas en la misma tabla.

De esa manera, evita almacenar valores separados por comas en columnas, evita romper su código/consultas si de repente tiene que introducir otro valor column{X+1} - y en su lugar puede tener tantos o tan pocos valores de entrada como necesite.

Para usted, eso sería algo así como una nueva tabla llamada land_owner_input , donde tienes el valor (que pondrías en columnX ), y una referencia a la fila en land_owner al que pertenece el valor.

El patrón de diseño típico sería algo como esto.

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

Tenga en cuenta que su land_owner_id en la nueva tabla debe ser exactamente del mismo tipo y tamaño que el ID al que hace referencia.

También puede crear una restricción de clave externa entre el land_owner_id y el ID del land_owner tabla para garantizar la integridad de los datos.

Una vez que tenga su nueva tabla, puede consultarlas juntas usando LEFT JOIN (o un JOIN normal si solo desea devolver filas si tiene valores de entrada).

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