Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Armazenando uma matriz de comprimento desconhecido


Se você se encontrar em uma situação em que começa a ter column1 , column2 na mesa - é provável que seu design esteja com falhas e, em vez disso, você deve criar uma tabela separada - onde cada columnX recebe uma linha própria. É (quase) sempre melhor ter uma tabela separada se você tiver várias colunas repetidas na mesma tabela.

Dessa forma, você evita armazenar valores separados por vírgulas em colunas, evita quebrar seu código/consultas se de repente precisar introduzir outro valor column{X+1} - e, em vez disso, pode ter quantos valores de entrada você precisar.

Para você, isso seria algo como uma nova tabela chamada land_owner_input , onde você tem o valor (que você colocaria em columnX ) e uma referência à linha em land_owner que o valor pertence.

O padrão de design típico seria algo assim.
CREATE TABLE land_owner_input (
    land_owner_input_id INT(11) AUTO_INCREMENT
    land_owner_id INT(11), 
    land_owner_input_value VARCHAR(MAX)
);

Lembre-se de que seu land_owner_id na nova tabela deve ser exatamente do mesmo tipo e tamanho que o ID que faz referência.

Você também pode criar uma restrição de chave estrangeira entre o land_owner_id e o ID do land_owner tabela para garantir a integridade dos dados.

Depois de ter sua nova tabela, você pode consultá-los juntos usando um LEFT JOIN (ou um JOIN normal se você quiser apenas retornar linhas se tiver 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