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

Cara terbaik untuk menyimpan pengaturan pengguna di MySQL?

Untuk apa pun yang selalu ditetapkan untuk setiap pengguna Anda harus cenderung menyimpannya di Users tabel, per normalisasi biasa. Adapun konfigurasi opsional saya cenderung menyukai struktur tabel berikut:

TABLE Users:
  id INT AI
  name VARCHAR
  ...

TABLE User_Settings
  user_id INT PK,FK
  name VARCHAR PK
  type BOOL
  value_int INT NULL
  value_str VARCHAR NULL

Dimana User_Settings.type menentukan apakah bidang integer atau string harus dirujuk.

yaitu:

INSERT INTO Users (id, name) VALUES (1, 'Sammitch');
INSERT INTO User_Settings (user_id, name, type, value_int) VALUES (1, 'level', 1, 75);
INSERT INTO User_Settings (user_id, name, type, value_str) VALUES (1, 'lang', 0, 'en');

Dan untuk masalah INSERT/UPDATE:

INSERT INTO User_Settings (user_id, name, type, value_str) VALUES (1, 'lang', 0, 'fr')
  ON DUPLICATE KEY UPDATE value_str='fr';

Selain itu, seperti yang dikatakan kebanyakan orang, membuat serial dan menyimpan preferensi bukanlah ide yang bagus karena:

  1. Anda tidak dapat mengambil satu nilai pun dengan kueri, Anda harus mengambil seluruh string bersambung, membatalkan serialisasi, dan membuang data yang tidak perlu.
  2. Ini mudah rusak, dan sulit untuk dipulihkan.
  3. Menulis permintaan mentah yang sulit, misalnya:untuk memperbaiki setelan tertentu secara global.
  4. Anda menyimpan apa yang pada dasarnya adalah data tabular dalam satu bidang tabel.

Edit Retrospektif September 2016:

Selama waktu itu, saya memiliki beberapa argumen dengan orang-orang tentang cara terbaik untuk menyimpan pengaturan opsional, serta struktur tabel umum yang ditentukan di atas.

Meskipun struktur tabel itu tidak terlalu buruk , itu tidak benar-benar baik antara. Ini mencoba untuk membuat yang terbaik dari situasi yang buruk. Serialisasi pengaturan opsional dapat bekerja selama Anda dapat mengakomodasi pengaturan ini:

  1. Semua dimuat sekaligus, tanpa memilih atau memilih.
  2. Tidak dapat diindeks, dapat ditelusuri, atau dimodifikasi dengan mudah secara massal .

Kemudian Anda dapat mempertimbangkan untuk menambahkan bidang seperti optional_settings di Users tabel yang berisi bentuk pengaturan [misalnya:JSON] berseri. Anda melakukan trade off di atas, tetapi ini adalah pendekatan yang lebih mudah dan Anda dapat menyimpan pengaturan yang lebih kompleks.

Juga, jika Anda menggunakan tipe LOB seperti TEXT untuk penyimpanan data tidak harus disimpan "dalam baris" setidaknya di MySQL.

Bagaimanapun, terserah Anda untuk menentukan persyaratan dan batasan aplikasi Anda, dan membuat pilihan terbaik berdasarkan informasi tersebut.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mungkinkah kueri PHP MYSQL mengabaikan variabel kosong dalam klausa WHERE?

  2. Cari seluruh tabel di mySQL untuk sebuah string

  3. HTML - Ubah\Perbarui konten halaman tanpa menyegarkan\memuat ulang halaman

  4. Memantau Percona XtraDB Cluster - Metrik Utama

  5. SQLAlchemy - Mendapatkan daftar tabel