Apa perbedaan nyata antara hubungan satu-ke-banyak dan banyak-ke-satu? Itu hanya terbalik, jenis?
Saya tidak dapat menemukan tutorial 'baik-dan-mudah-dipahami' tentang topik ini selain yang ini: SQL untuk Pemula: Bagian 3 - Hubungan Database
Apa perbedaan nyata antara hubungan satu-ke-banyak dan banyak-ke-satu? Itu hanya terbalik, jenis?
Saya tidak dapat menemukan tutorial 'baik-dan-mudah-dipahami' tentang topik ini selain yang ini: SQL untuk Pemula: Bagian 3 - Hubungan Database
Jawaban:
Ya, itu sebaliknya. Itu tergantung pada sisi hubungan mana entitas itu berada.
Misalnya, jika satu departemen dapat mempekerjakan beberapa karyawan, maka departemen ke karyawan adalah hubungan one to many (1 departemen mempekerjakan banyak karyawan), sedangkan hubungan karyawan ke departemen adalah banyak dengan satu (banyak karyawan bekerja di satu departemen).
Info lebih lanjut tentang jenis hubungan:
Dari halaman ini tentang Terminologi Database
Kebanyakan hubungan antar tabel adalah satu-ke-banyak.
Contoh:
- Satu kawasan bisa menjadi habitat banyak pembaca.
- Satu pembaca dapat memiliki banyak langganan.
- Satu surat kabar dapat memiliki banyak langganan.
Relasi Banyak ke Satu sama dengan satu-ke-banyak, tetapi dari sudut pandang yang berbeda.
- Banyak pembaca tinggal di satu area.
- Banyak langganan bisa dari satu dan pembaca yang sama.
- Banyak langganan untuk satu surat kabar yang sama.
Apa perbedaan nyata antara hubungan satu-ke-banyak dan banyak-ke-satu?
Ada perbedaan konseptual antara istilah-istilah ini yang akan membantu Anda memvisualisasikan data dan juga kemungkinan perbedaan dalam skema yang dihasilkan yang harus dipahami sepenuhnya. Sebagian besar perbedaannya adalah salah satu perspektif.
Dalam hubungan satu ke banyak , tabel lokal memiliki satu baris yang mungkin terkait dengan banyak baris di tabel lain. Dalam contoh dari SQL untuk pemula , satu Customerdapat dikaitkan dengan banyak Orders.
Dalam hubungan banyak-ke-satu yang berlawanan , tabel lokal mungkin memiliki banyak baris yang terkait dengan satu baris di tabel lain. Dalam contoh kita, banyak Orders dapat dikaitkan dengan satu Customer. Perbedaan konseptual ini penting untuk representasi mental.
Selain itu, skema yang mendukung hubungan dapat direpresentasikan secara berbeda dalam tabel Customerdan Order. Misalnya, jika pelanggan memiliki kolom iddan name:
id,name
1,Bill Smith
2,Jim Kenshaw
Kemudian agar a Orderdikaitkan dengan Customer, banyak implementasi SQL menambahkan ke Ordertabel kolom yang menyimpan iddari yang terkait Customer(dalam skema ini customer_id:
id,date,amount,customer_id
10,20160620,12.34,1
11,20160620,7.58,1
12,20160621,158.01,2
Pada baris data di atas, jika kita melihat customer_idkolom id, kita melihat bahwa Bill Smith(customer-id # 1) memiliki 2 pesanan yang terkait dengannya: satu untuk $ 12,34 dan satu untuk $ 7,58. Jim Kenshaw(customer-id # 2) hanya memiliki 1 pesanan seharga $ 158.01.
Yang penting untuk disadari adalah bahwa biasanya hubungan satu-ke-banyak tidak benar-benar menambahkan kolom apa pun ke tabel yang merupakan "satu". Tidak Customermemiliki kolom tambahan yang mendeskripsikan hubungan dengan Order. Bahkan Customerkekuatan juga memiliki hubungan satu-ke-banyak dengan ShippingAddressdan SalesCallmeja dan belum memiliki kolom tambahan ditambahkan ke Customermeja.
Namun, untuk hubungan banyak-ke-satu yang akan dijelaskan, seringkali idkolom ditambahkan ke tabel "banyak" yang merupakan kunci asing ke tabel "satu" - dalam hal ini customer_idkolom ditambahkan ke Order. Untuk pesanan terkait # 10 sebesar $ 12,34 Bill Smith, kami menetapkan customer_idkolom ke Bill Smithid 1.
Namun, mungkin juga ada tabel lain yang menjelaskan hubungan Customerdan Order, sehingga tidak ada bidang tambahan yang perlu ditambahkan ke Ordertabel. Alih-alih menambahkan customer_idbidang ke Ordertabel, mungkin ada Customer_Ordertabel yang berisi kunci untuk Customerdan Order.
customer_id,order_id
1,10
1,11
2,12
Dalam hal ini, one-to-many dan many-to-one semuanya bersifat konseptual karena tidak ada perubahan skema di antara keduanya. Mekanisme mana yang bergantung pada skema dan implementasi SQL Anda.
Semoga ini membantu.
javax.persistence.OneToManyberbeda dengan ManyToOne. Apakah Anda mengatakan bahwa mereka identik atau hanya tergantung pada penerapannya? Apakah jawaban saya salah?
Tidak ada perbedaan. Ini hanya masalah bahasa dan preferensi tentang cara Anda menyatakan hubungan tersebut.
Jawaban untuk pertanyaan pertama Anda adalah: keduanya serupa,
Jawaban untuk pertanyaan kedua Anda adalah: satu-ke-banyak -> seorang PRIA (tabel PRIA) dapat memiliki lebih dari satu istri (tabel PEREMPUAN) banyak-ke-satu -> lebih dari satu wanita telah menikah dengan satu PRIA.
Sekarang jika Anda ingin menghubungkan relasi ini dengan dua tabel MAN dan WOMEN, satu baris tabel MAN mungkin memiliki banyak relasi dengan baris pada tabel WOMEN. semoga jelas.
Dalam SQL, hanya ada satu jenis relasi, yang disebut Referensi. (Bagian depan Anda mungkin melakukan hal-hal yang membantu atau membingungkan [seperti di beberapa Jawaban], tetapi itu adalah cerita yang berbeda.)
Dalam istilah SQL, Bar mereferensikan Foo
Bukan sebaliknya
CREATE TABLE Foo (
Foo CHAR(10) NOT NULL, -- primary key
Name CHAR(30) NOT NULL
CONSTRAINT PK -- constraint name
PRIMARY KEY (Foo) -- pk
)
CREATE TABLE Bar (
Bar CHAR(10) NOT NULL, -- primary key
Foo CHAR(10) NOT NULL, -- foreign key to Foo
Name CHAR(30) NOT NULL
CONSTRAINT PK -- constraint name
PRIMARY KEY (Bar), -- pk
CONSTRAINT Foo_HasMany_Bars -- constraint name
FOREIGN KEY (Foo) -- fk in (this) referencing table
REFERENCES Foo(Foo) -- pk in referenced table
)Karena Foo.Foomerupakan Kunci Utama, itu unik, hanya ada satu baris untuk nilai tertentuFoo
Bar.Foomerupakan Referensi, Kunci Asing, dan tidak ada indeks unik di atasnya, dapat terdapat banyak baris untuk nilai tertentu dariFoo Foo::Baradalah satu-ke-banyak Bar::Foobanyak-ke-satu
Barbaris, hanya ada satu Foobaris yang ReferensiApa perbedaan nyata antara hubungan satu ke banyak dan banyak ke satu?
Hanya ada satu hubungan, oleh karena itu tidak ada perbedaan. Persepsi (dari satu "ujung" atau "ujung" lainnya) atau membacanya secara terbalik, tidak mengubah relasi.
Kardinalitas dideklarasikan pertama kali dalam model data, yang artinya Logis dan Fisik (maksud), lalu dalam implementasinya (maksud terealisasi).
One to zero-to-many
Dalam SQL hanya itu (di atas) yang diperlukan.
One to one-to-many
Anda memerlukan Transaksi untuk menerapkan yang ada di tabel Referensi.
One to zero-to-one
Anda membutuhkan Bar:
CONSTRAINT AK -- constraint name
UNIQUE (Foo) -- unique column, which makes it an Alternate Key
Satu ke satu
Anda memerlukan Transaksi untuk menerapkan yang ada di tabel Referensi.
Banyak ke banyak
Tidak ada hal seperti itu di tingkat Fisik (ingat, hanya ada satu jenis relasi dalam SQL).
Pada level Logika awal selama latihan pemodelan, akan lebih mudah untuk menggambar relasi seperti itu. Sebelum model mendekati implementasi, sebaiknya model ditingkatkan menggunakan hanya hal-hal yang bisa ada. Hubungan seperti itu diselesaikan dengan menerapkan Tabel Asosiatif.
One-to-Many dan Many-to-One serupa dalam Multiplisitas tapi tidak Aspek (yaitu Directionality).
Pemetaan Asosiasi antara kelas entitas dan Hubungan antar tabel. Ada dua kategori Hubungan:
Tidak ada perbedaan praktis. Gunakan saja hubungan yang paling masuk akal mengingat cara Anda memandang masalah Anda seperti yang diilustrasikan oleh Devendra.
--- Banyak menjadi satu --- Ketiga anak itu dapat memiliki satu Orang Tua.
Keduanya mirip. Ini bisa digunakan milik kebutuhan. Jika Anda ingin mencari anak untuk orang tua tertentu, Anda dapat memilih One-To-Many. atau, ingin mencari orang tua untuk anak kembar, Anda bisa memilih Many-To-One. Juga....,
satu-ke-banyak memiliki kelas induk berisi n jumlah anak jadi ini adalah pemetaan koleksi.
many-to-one memiliki n jumlah anak berisi satu orang tua sehingga merupakan pemetaan objek