Mysql
 sql >> база данни >  >> RDS >> Mysql

Съхранение на csv в полето MySQL – лоша идея?

Не искате да съхранявате стойността във формата, разделена със запетая.

Помислете за случая, когато решите да присъедините тази колона към друга таблица.

Считайте, че имате,

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

и искате да намерите различни стойности за всеки x, т.е.:

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

или може да искате да проверите дали има 3 в него

или може да искате да ги преобразувате в отделни редове:

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

Ще бъде ОГРОМНА БОЛКА.

Използвайте поне 1-ви принцип на нормализиране - имайте отделен ред за всяка стойност.

Сега кажете, че първоначално сте имали това на масата:

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

Можете лесно да го конвертирате в csv стойности:

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

Ако искате да търсите, ако x =1 има елемент 3. Лесно.

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

което в по-ранен случай би използвало ужасно find_in_set :

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

Ако смятате, че можете да използвате like с CSV стойности за търсене, тогава първо like %x% не може да използва индекси. Второ, това ще доведе до грешни резултати.
Кажете, че искате да проверите дали елемент ab присъства и направете %ab% той ще върне редове с abc abcd abcde .... .

Ако имате много потребители и елементи, тогава бих предложил да създадете отделна таблица users с PK потребителски идентификатор, друг items с PK itemid и накрая таблица за съпоставяне user_item с колони с userid,itemid.

Ако знаете, че просто ще трябва да съхранявате и извличате тези стойности и да не извършвате никакви операции върху тях, като присъединяване, търсене, разграничаване, преобразуване в отделни редове и т.н. и т.н. - може просто да е, можете (аз все пак не бих 't).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка в изготвения израз на mysql:MySQLSyntaxErrorException

  2. Как да се свържете с MySQL с помощта на Node.js

  3. ld:библиотеката не е намерена за -lzstd, докато инсталирате пакета за mysql2 gem Ruby на macOS Big Sur 11.4

  4. Което е най-добрият начин за двупосочно синхронизиране на динамични данни в реално време с помощта на mysql

  5. MySql сумира елементи на колона