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

Tabel Database, lebih banyak lebih baik?

Masalahnya di sini adalah mengetikkan . Ada tiga pendekatan dasar untuk menangani subtipe.

  1. Masukkan setiap jenis record ke dalam tabel yang benar-benar terpisah;
  2. Menempatkan catatan di tabel induk dan kemudian catatan di tabel subtipe; dan
  3. Letakkan semua record dalam satu tabel, memiliki kolom nullable untuk data "opsional" (yaitu hal-hal yang tidak berlaku untuk jenis itu).

Setiap strategi memiliki kelebihannya.

Misalnya, (3) terutama berlaku jika ada sedikit atau tidak ada perbedaan antara subtipe yang berbeda. Dalam kasus Anda, apakah catatan log yang berbeda memiliki kolom tambahan jika jenisnya tertentu? Jika tidak atau ada beberapa kasus ketika mereka menempatkan semuanya dalam satu tabel sangat masuk akal.

(2) umum digunakan untuk meja Pesta. Ini adalah model umum dalam CRM yang melibatkan objek Pihak induk yang memiliki subtipe untuk Orang dan Organisasi (Organisasi mungkin juga memiliki subtipe seperti Perusahaan, Asosiasi, dll). Orang dan Organisasi memiliki properti yang berbeda (misalnya sapaan, nama yang diberikan, tanggal lahir, dll untuk Orang) jadi masuk akal untuk membagi ini daripada menggunakan kolom nullable.

(2) berpotensi lebih hemat ruang (walaupun overhead kolom NULL di DBMS modern sangat rendah). Masalah yang lebih besar adalah bahwa (2) mungkin lebih membingungkan bagi pengembang. Anda akan mendapatkan situasi di mana seseorang perlu menyimpan bidang tambahan di suatu tempat dan akan memukulnya di kolom yang kosong untuk jenis itu hanya karena lebih mudah melakukan itu daripada mendapatkan persetujuan untuk DBA untuk menambahkan kolom (tidak, saya tidak bercanda ).

(1) mungkin skema 3 yang paling jarang digunakan dalam pengalaman saya.

Terakhir, skalabilitas harus dipertimbangkan dan mungkin merupakan kasus terbaik untuk (1). Pada titik tertentu, JOIN tidak berskala secara efektif dan Anda harus menggunakan semacam skema partisi untuk mengurangi ukuran tabel Anda. (1) adalah salah satu metode untuk melakukan itu (tetapi metode kasar).

Saya tidak akan terlalu khawatir tentang itu. Biasanya Anda perlu mendapatkan ratusan juta atau miliaran data sebelum hal itu menjadi masalah (kecuali jika data Anda benar-benar besar, dalam hal ini hal itu akan terjadi lebih cepat).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Matikan kueri MySQL saat pengguna dibatalkan

  2. Ubah bahasa pesan kesalahan MySQL

  3. Bandingkan tanggal di MySQL

  4. Symfony2, Doctrine2, MySql, lihat tabel

  5. Bagaimana Anda mengatur pager default untuk klien MySQL?