Jika kita memiliki Tabel A yang memiliki hubungan satu lawan satu dengan Tabel B, apakah masuk akal untuk memisahkannya? Atau apakah tidak ada salahnya untuk menggabungkan mereka ke dalam satu meja? Apakah salah satu dari skenario ini (dua tabel vs satu tabel gabungan) berdampak apa pun terhadap bentuk normal (1NF, 2NF, 3NF, dll)?
database
relational-database
normalization
Saltshaker ke-29
sumber
sumber
Jawaban:
Ya, ada banyak alasan mengapa ini mungkin desain yang lebih baik.
Anda mungkin memiliki hubungan warisan / ekstensi, misalnya Anda mungkin memiliki
User
tabel dan kemudianAdministrator
tabel yang memiliki lebih banyak bidang. Kedua tabel mungkin memiliki kunci utama ID Pengguna (dan karena itu memiliki hubungan 1: 1) tetapi tidak semua pengguna akan memiliki catatan dalamAdministrator
tabel. Anda akan membutuhkan sesuatu yang serupa jika Anda mendukung alur kerja, misalnyaScheduledTask
tabel danCompletedTask
tabel.Anda mungkin ingin memiliki tabel yang ringan untuk data yang umum digunakan
User
dan kemudian tabel yang lebih besar untuk detail yang tidak terlalu sering Anda butuhkanUserDetails
. Ini dapat meningkatkan kinerja karena Anda dapat memasukkan lebih banyak catatan ke dalam satu halaman data.Anda mungkin ingin izin yang berbeda ke tabel, misalnya
User
danUserCredentials
Anda mungkin menginginkan strategi cadangan yang berbeda dan oleh karena itu letakkan dua tabel di partisi yang berbeda, misalnya
Transaction
danTransactionArchive
Anda mungkin memerlukan lebih banyak kolom daripada yang dapat didukung dalam satu tabel, misalnya jika ada banyak kolom teks besar yang harus Anda indeks dan platform DB Anda terbatas pada halaman data 4K atau apa pun yang Anda miliki.
sumber
Menambahkan ke jawaban excelent oleh @ john-wu yang lain, alasan lain adalah ketika Anda memiliki tipe kolom A BLOB seperti gambar.
Anda ingin memiliki kolom Gumpalan di tabel terpisah, tidak hanya agar kueri di tabel pengguna lebih cepat, tetapi juga karena Anda bisa memindahkan tabel yang berisi gumpalan ke tablespace yang berbeda dengan penyimpanan yang lebih murah, lebih lambat, menjaga data yang paling kueri dalam tablespace utama pada penyimpanan yang lebih cepat.
sumber
Hubungan satu ke satu hanya benar-benar masuk akal ketika Anda ingin catatan terkait di Tabel B menjadi opsional.
Terkadang yang Anda inginkan adalah rekaman varian atau Tagged Union . Itu berarti Anda memiliki beberapa tabel yang berisi informasi berbeda, tetapi semuanya terkait kembali ke Tabel A dalam hubungan satu-ke-satu. Anda kemudian memilih tabel mana yang akan dikaitkan berdasarkan bidang di Tabel A
Sebagai contoh:
sumber
Dalam pemodelan bisnis, dua entitas A dan B yang secara logis terpisah dari sudut pandang bisnis biasanya memetakan ke tabel yang berbeda.
Misalnya, ketika melakukan pemodelan bisnis dengan cara berorientasi objek, Anda biasanya memiliki semacam pemetaan objek-relasional. Anda mungkin mulai dengan model objek dan mendapatkan model relasional Anda dari itu. Jadi bayangkan dalam model objek Anda, Anda telah membuat kelas A dan B, yang, meskipun objek memiliki korespondensi 1: 1, harus tetap terpisah karena prinsip tanggung jawab tunggal . Catatan dalam model objek Anda, kelas-kelas ini bukan hanya tabel dengan atribut, mereka mungkin mewakili objek bisnis, dengan beberapa perilaku yang diterapkan dalam metode. Dan ketika Anda memetakan kelas-kelas itu sekarang langsung ke model relasional, Anda mendapatkan tabel terpisah A dan B dengan hubungan 1: 1.
Menurut pengalaman saya, ketika membuat model data bisnis atau OO, pemisahan logis ini jauh lebih khas untuk hubungan 1: 1 daripada alasan "fisik" seperti kinerja, keamanan individu, atau partisi.
sumber