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

Lagring af en række af ukendt længde

Hvis du befinder dig i en situation, hvor du begynder at have column1 , column2 på bordet - chancerne er for, at dit design bliver fejlbehæftet, og du bør i stedet oprette en separat tabel - hvor hver columnX får sin egen række. Det er (næsten) altid bedre at have en separat tabel, hvis du oplever, at du har flere gentagne kolonner på den samme tabel.

På den måde undgår du at gemme kommaseparerede værdier i kolonner, du undgår at knække din kode/forespørgsler, hvis du pludselig skal indføre en anden værdi column{X+1} - og i stedet kan have så mange eller så få input-værdier, som du har brug for.

For dig ville det være noget i retning af en ny tabel kaldet land_owner_input , hvor du har værdien (som du ville sætte i columnX ), og en reference til rækken i land_owner at værdien tilhører.

Typisk designmønster ville være noget som dette.

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

Husk, at dit land_owner_id i den nye tabel skal være af nøjagtig samme type og størrelse som det ID, det refererer til.

Du kan også oprette en fremmednøgle-begrænsning mellem land_owner_id og ID'et for land_owner tabel for at sikre dataintegritet.

Når du har din nye tabel, kan du forespørge dem sammen ved at bruge en LEFT JOIN (eller en normal JOIN hvis du kun ønsker at returnere rækker, hvis det har input-værdier).

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


  1. Multithreading i MySQL?

  2. mysql med Exited(1) fra docker

  3. Laravel - Oprettelse af tabeller dynamisk (uden migrering)

  4. Sådan gemmer du kun tid; ikke dato og tid?