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

Przechowywanie csv w polu MySQL – zły pomysł?

Nie chcesz przechowywać wartości w postaci oddzielonej przecinkami.

Rozważ przypadek, gdy zdecydujesz się połączyć tę kolumnę z jakimś innym stołem.

Uważaj, że tak,

x  items
1  1, 2, 3
1  1, 4
2  1

i chcesz znaleźć różne wartości dla każdego x, np.:

x  items
1  1, 2, 3, 4
2  1

a może chcesz sprawdzić, czy ma w sobie 3

a może chcesz przekonwertować je na osobne wiersze:

x  items
1  1
1  2
1  3
1  1
1  4
2  1

To będzie OGROMNY BÓL.

Użyj co najmniej pierwszej zasady normalizacji - dla każdej wartości należy mieć osobny wiersz.

Powiedzmy, że pierwotnie miałeś to przy stole:

x  item
1  1
1  2
1  3
1  1
1  4
2  1

Możesz łatwo przekonwertować go na wartości csv:

select x, group_concat(item order by item) items
from t
group by x

Jeśli chcesz wyszukać, jeśli x =1 ma element 3. Łatwo.

select * from t where x = 1 and item = 3

które we wcześniejszym przypadku użyłoby straszne find_in_set :

select * from t where x = 1 and find_in_set(3, items);

Jeśli uważasz, że możesz użyć like z wartościami CSV do wyszukiwania, najpierw like %x% nie można używać indeksów. Po drugie, spowoduje to nieprawidłowe wyniki.
Powiedz, że chcesz sprawdzić, czy element ab jest obecny i robisz %ab% zwróci wiersze z abc abcd abcde .... .

Jeśli masz wielu użytkowników i przedmiotów, sugeruję utworzenie osobnej tabeli users z identyfikatorem użytkownika PK, inne items z itemid PK i na końcu tabelą mapowania user_item mający identyfikator użytkownika, kolumny itemid.

Jeśli wiesz, że będziesz musiał tylko przechowywać i pobierać te wartości i nie wykonywać na nich żadnych operacji, takich jak łączenie, wyszukiwanie, rozróżnianie, konwersja do oddzielnych wierszy itp. itd. - może być po prostu może być, możesz (nadal bym nie).



  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 istnieje sposób na poznanie Twojej aktualnej nazwy użytkownika w mysql?

  2. Php mysql zapytanie pdo:wypełnij zmienną wynikiem zapytania

  3. UPUŚĆ TABELĘ, JEŚLI ISTNIEJE w MySQL

  4. Jak uzyskać nazwy wszystkich kolumn dla wszystkich tabel w MySQL?

  5. Obliczanie mediany za pomocą Mysql