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 Customer
dapat dikaitkan dengan banyak Order
s.
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 Order
s dapat dikaitkan dengan satu Customer
. Perbedaan konseptual ini penting untuk representasi mental.
Selain itu, skema yang mendukung hubungan dapat direpresentasikan secara berbeda dalam tabel Customer
dan Order
. Misalnya, jika pelanggan memiliki kolom id
dan name
:
id,name
1,Bill Smith
2,Jim Kenshaw
Kemudian agar a Order
dikaitkan dengan Customer
, banyak implementasi SQL menambahkan ke Order
tabel kolom yang menyimpan id
dari 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_id
kolom 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 Customer
memiliki kolom tambahan yang mendeskripsikan hubungan dengan Order
. Bahkan Customer
kekuatan juga memiliki hubungan satu-ke-banyak dengan ShippingAddress
dan SalesCall
meja dan belum memiliki kolom tambahan ditambahkan ke Customer
meja.
Namun, untuk hubungan banyak-ke-satu yang akan dijelaskan, seringkali id
kolom ditambahkan ke tabel "banyak" yang merupakan kunci asing ke tabel "satu" - dalam hal ini customer_id
kolom ditambahkan ke Order
. Untuk pesanan terkait # 10 sebesar $ 12,34 Bill Smith
, kami menetapkan customer_id
kolom ke Bill Smith
id 1.
Namun, mungkin juga ada tabel lain yang menjelaskan hubungan Customer
dan Order
, sehingga tidak ada bidang tambahan yang perlu ditambahkan ke Order
tabel. Alih-alih menambahkan customer_id
bidang ke Order
tabel, mungkin ada Customer_Order
tabel yang berisi kunci untuk Customer
dan 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.OneToMany
berbeda 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.Foo
merupakan Kunci Utama, itu unik, hanya ada satu baris untuk nilai tertentuFoo
Bar.Foo
merupakan Referensi, Kunci Asing, dan tidak ada indeks unik di atasnya, dapat terdapat banyak baris untuk nilai tertentu dariFoo
Foo::Bar
adalah satu-ke-banyak Bar::Foo
banyak-ke-satu
Bar
baris, hanya ada satu Foo
baris 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