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 }
- Pada tabel (baik) pertama Anda tidak memiliki data duplikat yang tidak diperlukan.
- Menyisipkan di tabel pertama akan jauh lebih cepat.
- Tabel pertama akan lebih mudah masuk ke memori, mempercepat kueri Anda.
- InnoDB dioptimalkan dengan mempertimbangkan model A, bukan dengan model B.
- 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.
- 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.
- 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. - 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.
- Apakah Anda memiliki masalah kecepatan yang serius? Jika tidak, apakah Anda mendenormalisasi tabel Anda?
- 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.
- Saat menggunakan kunci komposit, Anda hanya dapat menggunakan bagian paling kanan dari kunci, yaitu Anda tidak dapat menggunakan
floor_id
di mejabed
selain menggunakanid+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!