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

Apa pendapat Anda tentang penggunaan pengidentifikasi tekstual di kolom tabel saat mendekati database dengan mempertimbangkan normalisasi dan skalabilitas?

Yang pertama lebih dinormalisasi, jika sedikit tidak lengkap. Ada beberapa pendekatan yang dapat Anda ambil, yang paling sederhana (dan sebenarnya, yang paling 'benar') akan membutuhkan dua tabel, dengan batasan FK yang jelas.

commentid ---- subjectid ----- idType
--------------------------------------
1                22            post
2                26            photo
3                84            reply
4                36            post
5                22            status

idType
------
post
photo
reply
status

Jika Anda suka, Anda dapat menggunakan char(1) atau serupa untuk mengurangi dampak varchar pada panjang kunci/indeks, atau untuk memfasilitasi penggunaan dengan ORM jika Anda berencana untuk menggunakannya. NULL selalu mengganggu, dan jika Anda mulai melihatnya muncul dalam desain Anda, akan lebih baik jika Anda dapat menemukan cara yang nyaman untuk menghilangkannya.

Pendekatan kedua adalah yang saya sukai ketika berurusan dengan lebih dari 100 juta baris:

commentid ---- subjectid
------------------------
1                22    
2                26     
3                84     
4                36     
5                22     

postIds ---- subjectid
----------------------
1                22   
4                36   

photoIds ---- subjectid
-----------------------
2                26    

replyIds ---- subjectid
-----------------------
3                84    

statusIds ---- subjectid
------------------------
5                22     

Tentu saja ada juga pendekatan hibrida (sedikit didenormalisasi), yang saya gunakan secara ekstensif dengan kumpulan data besar, karena cenderung kotor. Cukup sediakan tabel spesialisasi untuk idType yang telah ditentukan sebelumnya, tetapi pertahankan kolom idType adhoc di tabel commentId.

Perhatikan bahwa bahkan pendekatan hybrid hanya membutuhkan 2x ruang dari tabel yang didenormalisasi; dan memberikan batasan kueri sepele oleh idType. Namun batasan integritas tidak langsung, menjadi batasan FK pada UNION turunan dari tabel tipe. Pendekatan umum saya adalah menggunakan pemicu pada tabel hibrid, atau tampilan yang dapat diperbarui yang setara untuk menyebarkan pembaruan ke sub-jenis tabel yang benar.

Baik pendekatan sederhana maupun pendekatan tabel sub-tipe yang lebih kompleks berfungsi; tetap saja, untuk sebagian besar tujuan, KISS berlaku, jadi saya curiga Anda mungkin harus memperkenalkan tabel ID_TYPES, FK yang relevan, dan menyelesaikannya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP mysql PDO menolak untuk menetapkan nilai NULL

  2. BUAT LIHAT DI MANA SELECTid =VIEWrowID

  3. MySQL:ORDER BY dengan tanggal kosong '0000-00-00' sebagai yang terakhir tetapi sisanya ASC

  4. Bagaimana cara mendapatkan peringkat rata-rata per produk menggunakan kueri codeigniter?

  5. MySQL:@variabel vs. variabel. Apa bedanya?