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