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

Bagaimana cara menyimpan banyak nilai dalam satu kolom di mana menggunakan lebih sedikit memori?

Jika pengguna dapat memiliki banyak peran, mungkin lebih baik memiliki user_role tabel yang menyimpan informasi ini. Ini dinormalisasi, dan akan jauh lebih mudah untuk ditanyakan.

Tabel seperti:

user_id | role
--------+-----------------
      1 | Admin
      2 | User
      2 | Admin
      3 | User
      3 | Author

Akan memungkinkan Anda untuk membuat kueri untuk semua pengguna dengan peran tertentu, seperti SELECT user_id, user.name FROM user_role JOIN user WHERE role='Admin' daripada harus menggunakan penguraian string untuk mendapatkan detail dari kolom.

Antara lain, ini akan lebih cepat, karena Anda dapat mengindeks kolom dengan benar dan akan mengambil sedikit lebih banyak ruang daripada solusi apa pun yang menempatkan banyak nilai ke dalam satu kolom - yang bertentangan dengan tujuan database relasional dirancang.

Alasan ini tidak boleh disimpan adalah karena tidak efisien, karena alasan DCoder menyatakan pada komentar ke jawaban ini . Untuk memeriksa apakah pengguna memiliki peran, setiap baris tabel pengguna perlu dipindai, dan kemudian kolom "peran" harus dipindai menggunakan pencocokan string - terlepas dari bagaimana tindakan ini diekspos, RMDBS perlu melakukan operasi string untuk mengurai konten. Ini adalah operasi yang sangat mahal, dan sama sekali bukan desain database yang bagus.

Jika Anda membutuhkan untuk memiliki satu kolom, saya sangat menyarankan agar Anda tidak lagi memiliki masalah teknis, tetapi masalah manajemen orang . Menambahkan tabel tambahan ke database yang ada yang sedang dalam pengembangan, seharusnya tidak sulit. Jika Anda tidak berhak melakukannya, jelaskan mengapa tabel tambahan diperlukan kepada orang yang tepat - karena munging beberapa nilai menjadi satu kolom adalah buruk, buruk ide .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Host server MySQL tidak dikenal

  2. membuat nomor acak menggunakan MYSQL

  3. Sisa di PostgreSQL, MS SQL Server, MySQL, dan SQLite

  4. cadangan mysqldump dan pulihkan ke server jauh

  5. CAST DECIMAL ke INT