Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przechowywanie tablicy o nieznanej długości

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 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy PDO fetch() zgłasza wyjątek w przypadku niepowodzenia?

  2. Nie można zainstalować pakietu mysqlclient Python w systemie Windows

  3. MySQL wybierz dane rozdzielane

  4. Instalowanie klastra Percona XtraDB na CentOS 7

  5. Przekroczono limit czasu oczekiwania na blokadę; spróbuj zrestartować transakcję, mimo że nie używam transakcji