Apa yang dimaksud dengan hubungan satu-ke-satu dalam pemodelan data? Bagaimana Anda menerapkan hubungan ini dalam database? Contoh dalam artikel ini akan menjawab pertanyaan ini.
Ada tiga jenis hubungan antar entitas (tabel) dalam pemodelan data:
- Hubungan satu-ke-banyak (juga dilambangkan sebagai 1:M).
- Hubungan banyak ke banyak (M:N).
- Hubungan satu-ke-satu (1:1).
Jenis hubungan yang paling umum adalah hubungan satu ke banyak, di mana catatan dalam satu entitas dapat direferensikan oleh beberapa catatan di entitas lain. Tipe umum lainnya adalah hubungan banyak ke banyak. Jenis hubungan ini hanya digunakan dalam model data logis. Dalam database fisik, itu harus diimplementasikan dengan menggunakan hubungan satu-ke-banyak dan tabel persimpangan.
Dalam artikel ini, kita akan membahas jenis hubungan ketiga:hubungan satu lawan satu . Ini adalah jenis hubungan yang paling tidak umum dalam model data. Kami akan memberikan contoh hubungan satu-ke-satu, menunjukkan notasi untuk hubungan satu-ke-satu dalam diagram ER, dan mendiskusikan hubungan satu-ke-satu dalam praktik.
Contoh Hubungan Satu-ke-Satu
Pertama, apa itu hubungan satu-ke-satu? Ini adalah hubungan di mana catatan dalam satu entitas (tabel) dikaitkan dengan tepat satu catatan di entitas lain (tabel).
Mari kita lihat beberapa contoh nyata dari hubungan satu-ke-satu:
- Negara - ibu kota :Setiap negara memiliki tepat satu ibu kota. Setiap ibu kota adalah ibu kota tepat satu negara.
- Orang - sidik jarinya . Setiap orang memiliki serangkaian sidik jari yang unik. Setiap rangkaian sidik jari mengidentifikasi tepat satu orang.
- Email - akun pengguna . Untuk banyak situs web, satu alamat email dikaitkan dengan tepat satu akun pengguna dan setiap akun pengguna diidentifikasi berdasarkan alamat emailnya.
- Pasangan - pasangan :Dalam pernikahan monogami, setiap orang memiliki tepat satu pasangan.
- Profil pengguna - setelan pengguna . Satu pengguna memiliki satu set pengaturan pengguna. Satu set setelan pengguna dikaitkan dengan tepat satu pengguna.
Untuk kejelasan, mari kita bandingkan contoh ini dengan hubungan yang tidak satu-satu:
- Negara - kota: Setiap kota berada tepat di satu negara, tetapi sebagian besar negara memiliki banyak kota.
- Orang tua - anak :Setiap anak memiliki dua orang tua, tetapi setiap orang tua dapat memiliki banyak anak.
- Karyawan - manajer :Setiap karyawan memiliki tepat satu supervisor atau manajer langsung, tetapi setiap manajer biasanya mengawasi banyak karyawan.
Menunjukkan Hubungan Satu-ke-Satu dalam Diagram ER
Hubungan satu-ke-satu dalam diagram ER dilambangkan, seperti semua hubungan, dengan garis yang menghubungkan dua entitas. Kardinalitas “satu” dilambangkan dengan satu garis lurus. (Kardinalitas “banyak” dilambangkan dengan simbol kaki gagak .)
Hubungan satu-ke-satu antara negara dan modal dapat dilambangkan seperti ini:
Garis lurus tegak lurus berarti “wajib ”. Diagram ini menunjukkan bahwa suatu negara wajib memiliki ibu kota dan suatu negara wajib memiliki ibu kota.
Kemungkinan lain adalah untuk satu atau kedua sisi hubungan menjadi opsional . Sisi opsional dilambangkan dengan lingkaran terbuka. Diagram ini mengatakan bahwa ada hubungan satu-ke-satu antara seseorang dan sidik jarinya. Seseorang adalah wajib (sidik jari harus ditetapkan untuk seseorang), tetapi sidik jari bersifat opsional (seseorang mungkin tidak memiliki sidik jari yang ditetapkan dalam database).
Hubungan Satu-ke-Satu dalam Basis Data Fisik
Ada beberapa cara untuk mengimplementasikan hubungan satu-ke-satu dalam database fisik.
Kunci Utama sebagai Kunci Asing
Salah satu cara untuk mengimplementasikan hubungan satu-ke-satu dalam database adalah dengan menggunakan kunci utama yang sama di kedua tabel. Baris dengan nilai yang sama di kunci utama terkait. Dalam contoh ini, Prancis adalah country
dengan id
1 dan ibu kotanya ada di tabel capital
di bawah id
1.
country
id | nama |
---|---|
1 | Prancis |
2 | Jerman |
3 | Spanyol |
capital
Secara teknis, salah satu kunci utama harus ditandai sebagai kunci asing, seperti dalam model data ini:
Kunci utama dalam tabel capital
juga merupakan kunci asing yang mereferensikan kolom id di tabel negara . Sejak capital.id
adalah kunci utama, setiap nilai dalam kolom adalah unik, sehingga modal dapat merujuk paling banyak satu negara. Itu juga harus referensi suatu negara – ini adalah kunci utama, jadi tidak boleh dibiarkan kosong.
Kunci Asing Tambahan dengan Batasan Unik
Cara lain Anda dapat menerapkan hubungan satu-ke-satu dalam database adalah dengan menambahkan kolom baru dan menjadikannya kunci asing.
Dalam contoh ini, kami menambahkan kolom country_id
dalam tabel capital
. Ibukota dengan id
1, Madrid, diasosiasikan dengan negara 3, Spanyol.
country
id | nama |
---|---|
1 | Prancis |
2 | Jerman |
3 | Spanyol |
capital
id | nama | id_negara |
---|---|---|
1 | Madrid | 3 |
2 | Berlin | 2 |
3 | Paris | 1 |
Secara teknis, kolom country_id
harus berupa kunci asing yang mereferensikan id
kolom dalam tabel country
. Karena Anda ingin setiap ibu kota dikaitkan dengan tepat satu negara, Anda harus membuat kolom kunci asing country_id
unik.
Hubungan Satu-ke-Satu dalam Praktek
Beberapa Hubungan Satu-ke-Satu Terakhir
Hubungan satu-ke-satu adalah jenis hubungan yang paling jarang terjadi. Salah satu alasannya adalah bahwa sangat sedikit hubungan satu-ke-satu yang ada dalam kehidupan nyata. Juga, kebanyakan hubungan satu-ke-satu adalah satu-ke-satu hanya untuk beberapa periode waktu. Jika model Anda menyertakan komponen waktu dan menangkap riwayat perubahan, seperti yang sering terjadi, Anda akan memiliki sangat sedikit hubungan satu-ke-satu.
Hubungan monogami bisa putus atau salah satu pasangan bisa mati. Jika Anda memodelkan realitas hubungan monogami (seperti pernikahan atau serikat sipil) dari waktu ke waktu, Anda mungkin perlu memodelkan fakta bahwa hubungan tersebut hanya bertahan selama periode tertentu.
Anda akan berpikir bahwa seseorang dan sidik jarinya tidak pernah berubah. Tetapi bagaimana jika orang tersebut kehilangan satu jari atau jarinya terbakar parah? Sidik jari mereka mungkin berubah. Ini bukan skenario yang sangat sering; tetap saja, dalam beberapa model, Anda mungkin perlu mempertimbangkan hal ini.
Bahkan sesuatu yang tampaknya stabil seperti negara dan ibu kotanya berubah seiring waktu. Sebagai contoh, Bonn pernah menjadi ibu kota Jerman Barat (Bundesrepublik Deutschland) setelah Perang Dunia II, ketika Berlin menjadi bagian dari Jerman Timur. Ini berubah setelah reunifikasi Jerman; ibu kota Jerman (Bundesrepublik Deutschland) sekarang adalah Berlin. Perlu atau tidaknya Anda mempertimbangkan hal ini bergantung pada realitas bisnis Anda dan aplikasi yang sedang Anda kerjakan.
Skenario 1:1 yang Layak:Bagian Opsional dari Tabel
Saya dapat memikirkan satu skenario yang layak untuk hubungan satu-ke-satu yang nyata:bagian opsional dari sebuah tabel. Bayangkan Anda memiliki tabel pengguna dengan data pengguna. Tabel berisi informasi pengguna umum, seperti nama pengguna, alamat email, dan tanggal pendaftaran. Ini juga berisi pengaturan pengguna, seperti tema warna atau login otomatis untuk aplikasi itu. Namun, sebagian besar pengguna tidak memiliki pengaturan pengguna apa pun; mereka menggunakan pengaturan default.
user
id | nama | tanggal_pendaftaran | tema | login otomatis | |
---|---|---|---|---|---|
1 | Nathanael Talbot | [email protected] | 12-12-12 | gelap | benar |
2 | Talitha Yates | [email protected] | 14-12-2020 | ||
3 | Bendungan Markus | [email protected] | 15-12-2020 | ringan | salah |
4 | Nathalie Hays | [email protected] | 18-12-2020 | ||
5 | Gereja Maurice | [email protected] | 2020-12-20 | ||
6 | Arwa Valdez | [email protected] | 21-12-2020 |
Ada banyak bidang kosong di tabel ini. Anda dapat membagi user
tabel menjadi dua tabel:user
dan user_settings
, yang berisi informasi tentang setelan pengguna bagi mereka yang memilih untuk memilihnya.
user
id | nama | tanggal_pendaftaran | tema | login otomatis | |
---|---|---|---|---|---|
1 | Nathanael Talbot | [email protected] | 12-12-12 | gelap | benar |
2 | Talitha Yates | [email protected] | 14-12-2020 | ||
3 | Bendungan Markus | [email protected] | 15-12-2020 | ringan | salah |
4 | Nathalie Hays | [email protected] | 18-12-2020 | ||
5 | Gereja Maurice | [email protected] | 2020-12-20 | ||
6 | Arwa Valdez | [email protected] | 21-12-2020 |
user_settings
id_pengguna | tema | login otomatis |
---|---|---|
1 | gelap | benar |
3 | ringan | salah |
Memisahkan data menjadi dua tabel membuat kueri tabel menjadi lebih kompleks:Anda harus menggabungkan data dari kedua tabel. Di sisi lain, pengguna main utama tabel lebih mudah dikelola.
Pelajari Lebih Lanjut Tentang Hubungan Basis Data
Hubungan satu-ke-satu adalah hubungan di mana catatan dalam satu tabel dikaitkan dengan tepat satu catatan di tabel lain. Jenis hubungan ini jarang terjadi dalam kehidupan nyata. Jika Anda menyertakan waktu dalam model data Anda, banyak hubungan satu-ke-satu menjadi hubungan satu-ke-banyak atau banyak-ke-banyak. Skenario yang paling umum untuk menggunakan hubungan satu-ke-satu dalam database adalah membagi satu tabel menjadi dua:satu dengan kolom wajib, yang lain dengan kolom opsional.
Jika Anda menyukai artikel ini, lihat artikel lain tentang hubungan satu-ke-banyak dan banyak-ke-banyak di blog kami.
Jika Anda seorang siswa yang mengambil kelas basis data, pastikan untuk membuat akun Akademik gratis di Vertabelo, alat menggambar diagram ER online kami. Vertabelo memungkinkan Anda menggambar diagram ER logis dan fisik langsung di browser Anda. Ini mendukung PostgreSQL, SQL Server, Oracle, MySQL, Google BigQuery, Amazon Redshift, dan database relasional lainnya. Cobalah dan lihat betapa mudahnya untuk memulai!