Bire çok ve çoka bir ilişki arasındaki gerçek fark nedir? Sadece tersine mi dönüyor?
Bu konu hakkında bunun dışında 'iyi ve anlaşılması kolay' öğretici bulamıyorum: Yeni Başlayanlar için SQL: Bölüm 3 - Veritabanı İlişkileri
Bire çok ve çoka bir ilişki arasındaki gerçek fark nedir? Sadece tersine mi dönüyor?
Bu konu hakkında bunun dışında 'iyi ve anlaşılması kolay' öğretici bulamıyorum: Yeni Başlayanlar için SQL: Bölüm 3 - Veritabanı İlişkileri
Yanıtlar:
Evet, tam tersi. Varlığın ilişkinin hangi tarafında bulunduğuna bağlıdır.
Örneğin, bir departman birden fazla çalışan için istihdam sağlayabiliyorsa, departmandan çalışana bire bir ilişki olurken (1 departman çok sayıda çalışanı istihdam eder), buna karşın çalışandan departmana ilişki çoktur (birçok çalışan bir departmanda çalışır).
İlişki türleri hakkında daha fazla bilgi :
Veritabanı Terminolojisi hakkında bu sayfadan
Tablolar arasındaki çoğu ilişki bire çoktur.
Misal:
- Bir alan birçok okuyucunun yaşam alanı olabilir.
- Bir okuyucunun birçok aboneliği olabilir.
- Bir gazetenin birçok aboneliği olabilir.
Çoktan Bire ilişkisi bire çok ile aynıdır, ancak farklı bir bakış açısından.
- Birçok okuyucu tek bir bölgede yaşıyor.
- Birçok abonelik tek ve aynı okuyucu olabilir.
- Birçok abonelik tek ve aynı gazete içindir.
Bire çok ve çoka bir ilişki arasındaki gerçek fark nedir?
Bu terimler arasında, verileri görselleştirmenize yardımcı olması gereken kavramsal farklılıklar ve ayrıca oluşturulan şemada tam olarak anlaşılması gereken olası farklılıklar vardır. Çoğunlukla fark, perspektifle ilgilidir.
Bir de bire birçok ilişki, yerel tablo başka bir tablodaki sayıda satır ile ilişkili olabilir bir satır vardır. Yeni başlayanlar için SQL'deki örnekte , biri Customer
birçok Order
URL ile ilişkilendirilebilir .
Karşıt çoka bir ilişkide, yerel tablo başka bir tablodaki bir satırla ilişkilendirilmiş birçok satıra sahip olabilir. Örneğimizde, birçok Order
s bir ile ilişkilendirilebilir Customer
. Bu kavramsal farklılık, zihinsel temsil için önemlidir.
Ayrıca, ilişkiyi destekleyen şema Customer
ve Order
tablolarında farklı şekilde gösterilebilir . Örneğin, müşterinin sütunları varsa id
ve name
:
id,name
1,Bill Smith
2,Jim Kenshaw
Daha sonra, a Order
ile ilişkilendirilmek için Customer
, birçok SQL uygulaması Order
tabloya id
ilişkili olanları depolayan bir sütun ekler Customer
(bu şemada customer_id
:
id,date,amount,customer_id
10,20160620,12.34,1
11,20160620,7.58,1
12,20160621,158.01,2
Yukarıdaki veri satırlarında, customer_id
id sütununa bakarsak, Bill Smith
(müşteri kimliği # 1) kendisiyle ilişkili 2 siparişin olduğunu görürüz : biri 12,34 $ ve diğeri 7,58 $. Jim Kenshaw
(müşteri kimliği # 2) 158,01 ABD doları tutarında yalnızca 1 siparişe sahip.
Gerçekleştirilmesi gereken önemli olan, tipik olarak bire çok ilişkisinin aslında tabloya "bir" olan herhangi bir sütun eklememesidir. Customer
İle ilişkisini açıklamak hiçbir ekstra sütun var Order
. Aslında, Customer
aynı zamanda ShippingAddress
ve SalesCall
tablolarla bire çok ilişkisi olabilir ve yine de Customer
tabloya ek sütun eklenmemiş olabilir .
Bununla birlikte, çoka bir ilişkinin açıklanması için, genellikle id
"çok" tablosuna, "bir" tabloya yabancı anahtar olan bir customer_id
sütun eklenir - bu durumda Order
. $ 12,34 ile 10 numaralı siparişi ilişkilendirmek için Bill Smith
, customer_id
sütunu Bill Smith
's id 1'e atarız .
Ancak, Customer
ve Order
ilişkisini tanımlayan başka bir tablonun olması da mümkündür , böylece tabloya ek alanların eklenmesine gerek yoktur Order
. Tabloya bir customer_id
alan eklemek yerine, hem ve hem de için anahtarları içeren bir tablo Order
olabilir . Customer_Order
Customer
Order
customer_id,order_id
1,10
1,11
2,12
Bu durumda, aralarında şema değişikliği olmadığından bire çok ve çoktan bire hepsi kavramsaldır. Hangi mekanizma şemanıza ve SQL uygulamanıza bağlıdır.
Bu yardımcı olur umarım.
javax.persistence.OneToMany
farklı daha ManyToOne
. Eşanlamlı olduklarını mı yoksa sadece uygulamaya bağlı olduğunu mu söylüyorsunuz? Cevabım yanlış mı?
Fark yok. Bu sadece bir dil ve tercih meselesi, ilişkiyi hangi yöne çevirdiğinizle ilgili.
İlk sorunuzun cevabı: her ikisi de benzer,
İkinci sorunuzun cevabı şudur: bire çok -> bir ERKEK (MAN tablosu) birden fazla karısı olabilir (KADIN masası) çoka bir -> birden fazla kadın bir ADAM ile evlenmiştir.
Şimdi bu ilişkiyi MAN ve WOMEN adlı iki tabloyla ilişkilendirmek isterseniz, bir MAN tablo satırı WOMEN tablosundaki satırlarla birçok ilişkiye sahip olabilir. umarım açık.
SQL'de sadece bir tür ilişki vardır, buna Referans denir. (Kullanıcı arabiriminiz yararlı veya kafa karıştırıcı şeyler yapabilir [bazı Yanıtlarda olduğu gibi], ancak bu farklı bir hikaye.)
SQL terimlerinde, Bar Foo'ya atıfta bulunur
Diğer şekilde değil
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
)
Yana Foo.Foo
bir birincil anahtar olduğunu, sadece bir satır verilen herhangi bir değeri için, orada tektirFoo
Bar.Foo
Referans, bir yabancı anahtar, ve hiçbir benzersiz bir dizin üzerinde olduğunu, herhangi belirli bir değeri için fazla satır olabilirFoo
Foo::Bar
bire çoktur Bar::Foo
bir
Bar
satır için, sadece bir Foo
satır vardır ReferanslarBirden çoğa ve çoktan bire ilişki arasındaki gerçek fark nedir?
Tek bir ilişki vardır, bu nedenle fark yoktur. Algılama (bir "uçtan" veya diğer "sondan") veya onu geriye doğru okumak, ilişkiyi değiştirmez.
Önemlilik ilk olarak veri modelinde, yani Mantıksal ve Fiziksel (niyet) ve ardından uygulamada (amaç gerçekleştirilen) beyan edilir.
Birden çoka sıfıra
SQL'de (yukarıdakiler) gerekli olan tek şeydir.
Bire-
çoğa Bir İşleme ihtiyacınız var çoğa Referanslama tablosundaki uygulamak için bir İşleme .
Bire sıfıra bire
İhtiyacınız olan Bar
:
CONSTRAINT AK -- constraint name
UNIQUE (Foo) -- unique column, which makes it an Alternate Key
Birine biri
bir ihtiyaç İşlem Referans tablosundaki birini uygulamak.
Çoktan
çoğa Fiziksel düzeyde böyle bir şey yoktur (hatırlayın, SQL'de yalnızca bir tür ilişki vardır).
Modelleme alıştırması sırasında erken Mantıksal seviyelerde, böyle bir ilişki kurmak uygundur . Model uygulamaya yaklaşmadan önce, yalnızca var olabilecek şeyleri kullanmaya yükseltilse iyi olur. Böyle bir ilişki, bir İlişkilendirmeli Tablo uygulanarak çözülür.
Bire Çok ve Çoktan Bire, Çokluk açısından benzerdir ancak Boyut (Yönlülük) değildir.
Haritalanması Dernekleri varlık sınıfları arasındaki İlişkilerin tablolar arasında. İki İlişki kategorisi vardır:
Pratik bir fark yok. Devendra'nın gösterdiği gibi, sorununuzu nasıl gördüğünüze göre en mantıklı olan ilişkiyi kullanın.
--- Çoktan bire --- Bu 3 çocuğun tek bir Ebeveyni olabilir.
İkisi de benzer. Bu ihtiyaca göre kullanılabilir. Belirli bir ebeveyn için çocuk bulmak istiyorsanız, One-To-Many ile gidebilirsiniz. ya da ikizler için ebeveyn bulmak istiyorsanız, Çoktan Bire ile gidebilirsiniz. Aynı şekilde ....,
birden çoğa ebeveyn sınıfı n sayıda çocuk içerir, bu nedenle bu bir koleksiyon eşlemesidir.
çoktan bire n sayıda çocuk vardır, bir ebeveyn içerir, bu nedenle bu bir nesne eşlemesidir