Waktu yang paling masuk akal untuk menggunakan ini adalah jika ada dua konsep terpisah yang hanya berhubungan dengan cara ini. Misalnya, sebuah Mobil hanya dapat memiliki satu Pengemudi saat ini, dan Pengemudi hanya dapat mengemudikan satu mobil dalam satu waktu - jadi hubungan antara konsep Mobil dan Pengemudi adalah 1 banding 1. Saya menerima bahwa ini adalah contoh buatan untuk mendemonstrasikan titik.
Alasan lainnya adalah Anda ingin mengkhususkan konsep dengan cara yang berbeda. Jika Anda memiliki tabel Orang dan ingin menambahkan konsep berbagai jenis Orang, seperti Karyawan, Pelanggan, Pemegang Saham - masing-masing memerlukan kumpulan data yang berbeda. Data yang serupa di antara mereka akan ada di tabel Orang, informasi spesialis akan ada di tabel khusus untuk Pelanggan, Pemegang Saham, Karyawan.
Beberapa mesin database berjuang untuk secara efisien menambahkan kolom baru ke tabel yang sangat besar (banyak baris) dan saya telah melihat tabel ekstensi yang digunakan untuk memuat kolom baru, daripada kolom baru yang ditambahkan ke tabel asli. Ini adalah salah satu penggunaan tabel tambahan yang lebih mencurigakan.
Anda juga dapat memutuskan untuk membagi data untuk satu konsep di antara dua tabel yang berbeda untuk masalah kinerja atau keterbacaan, tetapi ini adalah kasus yang cukup khusus jika Anda memulai dari awal - masalah ini akan muncul nanti.
Pertama, saya pikir ini adalah pertanyaan tentang pemodelan dan mendefinisikan apa yang terdiri dari entitas yang terpisah. Misalkan Anda memiliki
customers
dengan satu dan hanya satuaddress
. Tentu saja Anda bisa menerapkan semuanya dalam satu tabelcustomer
, tetapi jika, di masa mendatang Anda mengizinkannya untuk memiliki 2 atau lebih alamat, maka Anda perlu mempertimbangkannya kembali (bukan masalah, tetapi ambil keputusan secara sadar).Saya juga dapat memikirkan kasus menarik yang tidak disebutkan dalam jawaban lain di mana memisahkan tabel dapat berguna:
Bayangkan, sekali lagi, Anda memiliki masing-masing
customers
dengan satuaddress
, tetapi kali ini opsional untuk memiliki alamat. Tentu saja Anda bisa mengimplementasikannya sebagai sekumpulanNULL
kolom yang dapat digunakan sepertiZIP,state,street
. Tetapi anggaplah diberikan bahwa Anda memang memiliki alamat, statusnya tidak opsional, tetapi ZIP-nya. Bagaimana memodelkannya dalam satu tabel? Anda dapat menggunakan batasan padacustomer
tabel, tetapi jauh lebih mudah untuk membagi di tabel lain dan membuat foreign_key NULLable. Dengan cara itu model Anda jauh lebih eksplisit dalam mengatakan bahwa entitasaddress
itu opsional, dan bahwaZIP
adalah atribut opsional dari entitas itu.sumber
Dalam waktu pemrograman saya, saya menemukan ini hanya dalam satu situasi. Yaitu ketika ada hubungan 1-ke-banyak dan 1-ke-1 antara 2 entitas yang sama ("Entitas A" dan "Entitas B").
Jika "Entitas A" memiliki beberapa "Entitas B" dan "Entitas B" hanya memiliki 1 "Entitas A" dan "Entitas A" hanya memiliki 1 "Entitas B" saat ini dan "Entitas B" hanya memiliki 1 "Entitas A".
Misalnya, sebuah Mobil hanya dapat memiliki satu Pengemudi saat ini, dan Pengemudi hanya dapat mengemudikan satu mobil dalam satu waktu - jadi hubungan antara konsep Mobil dan Pengemudi adalah 1 banding 1. - Saya meminjam contoh ini dari jawaban @Steve Fenton
Dimana Pengemudi dapat mengendarai banyak Mobil, tidak pada saat yang bersamaan. Jadi entitas Mobil dan Pengemudi adalah 1-ke-banyak atau banyak-ke-banyak. Tetapi jika kita perlu mengetahui siapa driver saat ini, maka kita juga membutuhkan relasi 1-to-1.
sumber
Kasus penggunaan lain mungkin jika jumlah kolom maksimum dalam tabel database terlampaui. Kemudian Anda bisa bergabung dengan tabel lain menggunakan OneToOne
sumber