Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menyimpan csv di bidang MySQL – ide buruk?

Anda tidak ingin menyimpan nilai dalam bentuk yang dipisahkan koma.

Pertimbangkan kasus ketika Anda memutuskan untuk menggabungkan kolom ini dengan tabel lain.

Anggap saja Anda sudah,

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

dan Anda ingin menemukan nilai yang berbeda untuk setiap x yaitu:

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

atau mungkin ingin memeriksa apakah ada 3 di dalamnya

atau mungkin ingin mengubahnya menjadi baris terpisah:

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

Ini akan menjadi SAKIT BESAR.

Gunakan minimal normalisasi prinsip 1 - memiliki baris terpisah untuk setiap nilai.

Sekarang, katakan awalnya Anda memiliki ini sebagai meja Anda:

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

Anda dapat dengan mudah mengubahnya menjadi nilai csv:

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

Jika Anda ingin mencari apakah x =1 memiliki item 3. Mudah.

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

yang dalam kasus sebelumnya akan menggunakan mengerikan find_in_set :

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

Jika menurut Anda Anda dapat menggunakan suka dengan nilai CSV untuk menelusuri, maka like %x% terlebih dahulu tidak dapat menggunakan indeks. Kedua, itu akan menghasilkan hasil yang salah.
Katakan Anda ingin memeriksa apakah item ab ada dan Anda melakukan %ab% itu akan mengembalikan baris dengan abc abcd abcde .... .

Jika Anda memiliki banyak pengguna dan item, maka saya sarankan membuat tabel terpisah users dengan userid PK, items lainnya dengan PK itemid dan terakhir tabel pemetaan user_item memiliki kolom userid, itemid.

Jika Anda tahu Anda hanya perlu menyimpan dan mengambil nilai-nilai ini dan tidak melakukan operasi apa pun padanya seperti bergabung, mencari, membedakan, konversi ke baris terpisah, dll. - mungkin saja, Anda bisa (saya masih akan '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. Mengimpor file sql besar ke MySql melalui baris perintah

  2. Tampilkan baris dari MySQL di mana datetime dalam satu jam berikutnya

  3. Kolom Jumlah MySQL JIKA ID ada di kueri tabel lain

  4. Bagaimana cara menghapus semua tabel MySQL dari baris perintah tanpa izin basis data DROP?

  5. Masukkan data ke DB MySql dan tampilkan jika penyisipan berhasil atau gagal