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

MySQL - Haruskah saya menggunakan kunci utama multi-kolom di setiap tabel anak?

Data ini dinormalisasi

TABLE { FIELDS }
-----------------------------------------------------------------------
building { id, data } 
floor { id, building_id, data }
room {id, floor_id, data }
bed {id, room_id, data }

Tabel ini bukan (ide buruk)

TABLE { FIELDS }
-----------------------------------------------------------------------
building { id, data } 
floor { id, building_id, data }
room {id, building_id, floor_id, data }
bed {id, building_id, floor_id, room_id, data }
  1. Pada tabel (baik) pertama Anda tidak memiliki data duplikat yang tidak diperlukan.
  2. Menyisipkan di tabel pertama akan jauh lebih cepat.
  3. Tabel pertama akan lebih mudah masuk ke memori, mempercepat kueri Anda.
  4. InnoDB dioptimalkan dengan mempertimbangkan model A, bukan dengan model B.
  5. Tabel terakhir (buruk) memiliki data duplikat, jika yang tidak sinkron, Anda akan berantakan. DB A tidak bisa jauh lebih sulit untuk keluar dari sinkronisasi, karena data hanya terdaftar sekali.
  6. Jika saya ingin menggabungkan data dari bangunan, lantai, kamar dan tempat tidur saya perlu menggabungkan keempat meja di model A dan juga model B, bagaimana Anda menghemat waktu di sini.
  7. InnoDB menyimpan data yang diindeks dalam filenya sendiri, jika Anda select hanya indeks , tabel itu sendiri tidak akan pernah diakses. Jadi mengapa Anda menduplikasi indeks? MySQL tidak akan pernah perlu membaca tabel utama.
  8. InnoDB menyimpan PK di setiap indeks sekunder , dengan komposit dan PK yang panjang, Anda memperlambat setiap pilihan yang menggunakan indeks dan memperbesar ukuran file; tanpa keuntungan apa pun.
  9. Apakah Anda memiliki masalah kecepatan yang serius? Jika tidak, apakah Anda mendenormalisasi tabel Anda?
  10. Jangan pernah berpikir untuk menggunakan MyISAM yang lebih sedikit mengalami masalah ini, tidak dioptimalkan untuk database multi-gabungan dan tidak mendukung integritas referensial atau transaksi dan tidak cocok untuk beban kerja ini.
  11. Saat menggunakan kunci komposit, Anda hanya dapat menggunakan bagian paling kanan dari kunci, yaitu Anda tidak dapat menggunakan floor_id di meja bed selain menggunakan id+building_id+floor_id , Ini berarti bahwa Anda mungkin harus menggunakan lebih banyak ruang kunci daripada yang dibutuhkan dalam Model A. Entah itu atau Anda perlu menambahkan indeks tambahan (yang akan menyeret salinan lengkap PK).

Singkatnya
Saya tidak melihat manfaat sama sekali dan banyak kekurangan dalam Model B, jangan pernah menggunakannya!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pemicu MySQL saya tidak berfungsi, sintaks sederhana, tidak rumit

  2. Django - Bagaimana cara menautkan ke database warisan melalui perantara?

  3. MySql - Cara memilih rentang id pada interval yang ditentukan

  4. Kirim beberapa elemen <select> dengan jQuery POST

  5. Cara tercepat untuk beralih melalui tabel besar menggunakan JDBC