Jeśli znajdziesz się w sytuacji, w której zaczniesz mieć column1
, column2
na stole – istnieje duże prawdopodobieństwo, że Twój projekt staje się wadliwy i zamiast tego powinieneś utworzyć osobną tabelę – w której każda columnX
dostaje swój własny rząd. To (prawie) zawsze lepiej mieć osobną tabelę, jeśli okaże się, że masz wiele powtarzających się kolumn na tej samej tabeli.
W ten sposób unikniesz przechowywania wartości oddzielonych przecinkami w kolumnach, unikniesz zerwania kodu/zapytań, jeśli nagle musisz wprowadzić inną wartość column{X+1}
- a zamiast tego może mieć tyle lub za mało wartości wejściowych, ile potrzebujesz.
Dla ciebie byłoby to coś w rodzaju nowej tabeli o nazwie land_owner_input
, gdzie masz wartość (którą umieściłbyś w columnX
) i odniesienie do wiersza w land_owner
do której należy ta wartość.
Typowy wzorzec projektowy byłby taki.
CREATE TABLE land_owner_input (
land_owner_input_id INT(11) AUTO_INCREMENT
land_owner_id INT(11),
land_owner_input_value VARCHAR(MAX)
);
Pamiętaj, że Twój land_owner_id
w nowej tabeli powinien być dokładnie tego samego typu i rozmiaru, co identyfikator, do którego się odwołuje.
Możesz także utworzyć ograniczenie klucza obcego między land_owner_id
oraz identyfikator land_owner
tabela w celu zapewnienia integralności danych.
Gdy masz już nową tabelę, możesz razem zapytać o nie, używając LEFT JOIN
(lub normalne JOIN
jeśli chcesz zwrócić tylko wiersze, które zawierają wartości wejściowe).
SELECT *
FROM land_owner AS lo
LEFT JOIN land_owner_input AS loi
ON loi.land_owner_id = lo.land_owner_id