Pokud se ocitnete v situaci, kdy začnete mít column1
, column2
na stole – je pravděpodobné, že váš návrh začíná být chybný, a měli byste místo toho vytvořit samostatnou tabulku – kde každý columnX
dostane vlastní řadu. Je (téměř) vždy lepší mít samostatnou tabulku, pokud zjistíte, že máte v jedné tabulce více opakujících se sloupců.
Tímto způsobem se vyhnete ukládání hodnot oddělených čárkami ve sloupcích, vyhnete se porušení kódu/dotazů, pokud náhle budete muset zavést jinou hodnotu column{X+1}
- a místo toho může mít tolik nebo málo vstupních hodnot, kolik potřebujete.
Pro vás by to bylo něco jako nová tabulka s názvem land_owner_input
, kde máte hodnotu (kterou byste vložili do columnX
) a odkaz na řádek v land_owner
že hodnota patří.
Typický designový vzor by byl něco takového.
CREATE TABLE land_owner_input (
land_owner_input_id INT(11) AUTO_INCREMENT
land_owner_id INT(11),
land_owner_input_value VARCHAR(MAX)
);
Mějte na paměti, že vaše land_owner_id
v nové tabulce by měl být přesně stejného typu a velikosti jako ID, na které se odkazuje.
Můžete také vytvořit omezení cizího klíče mezi land_owner_id
a ID land_owner
tabulky, aby byla zajištěna integrita dat.
Jakmile budete mít svou novou tabulku, můžete se na ně společně dotazovat pomocí LEFT JOIN
(nebo normální JOIN
pokud chcete vrátit řádky pouze v případě, že má vstupní hodnoty).
SELECT *
FROM land_owner AS lo
LEFT JOIN land_owner_input AS loi
ON loi.land_owner_id = lo.land_owner_id