Sadece şablon için Cliffs için bir güncelleme, teşekkürler ChaosPandion olarak.Yasal mı? başvuran İki yabancı anahtarlar aynı birincil
Kişi
PersonID Int PK
Ağ
PersonID Int PK FK
OtherPersonID Int PK FK
VEYA
Kişi
PersonID Int PK
Ağ
PersonID Int PK FK
FriendId Int PK FK
Arkadaş
FriendId Int PK
OtherPersonID Int FK
++++++ Orijinal Mesaj Aşağıda ++++++
Herkese selam
bir web geliştirici değilim ve yakın zamanda bir şirket ile bir proje başlamıştır. Şu anda, DBA ile site için tasarlanan şemayı hazırlama konusunda çalışıyorum ve birkaç tablodaki tasarım konusunda bir anlaşmazlık yaşadık ve konuyla ilgili bazı görüşler almak istiyorum.
Temel olarak, bir "arkadaş" ağını uygulayacak bir site üzerinde çalışıyoruz. Sitenin tüm kullanıcıları (Kişi kimliği int kimlik PK, vb) ile bir tablo tblUsers içerecektir. Yapmak isteyen pm ne
(NETWORKID int kimlik PK, Owners_PersonID int FK, Friends_PersonID int FK, vs) ile, kullanıcılar arasındaki ilişkilerin tüm tutacaktır ikinci bir tablo tblNetwork, yaratmaktır. Ya da tersine, NetworkID'yi kaldırın ve hem Birincil anahtar olarak hem Owners_PersonID hem de Friends_PersonID payının paylaşılmasını sağlayın. DBA onun sorunu sahip olduğu
budur. "Bu tür bir mimariyi sadece bir web sitesi için değil, bir veri ambarı şemasında uygulayacağını ve bunun da web geliştiricilerinin kolay yoldan çıkmaya çalıştığı bir başka örnek olduğunu" söyleyerek.
Şimdi belli ki, onun sözler biraz iltihaplı olduğunu ve bir uygun bir cevap bulmak için bana motive yardımcı olmuştur, ancak daha fazla bu yüzden, ben sadece doğru nasıl yapılacağını bilmek istiyorum. 10 yılı aşkın bir süredir veri tabanları ve programlama geliştirmekteyim, bazı üst düzey zihinlerle çalıştım ve bu tür bir tartışmayı hiç duymadım.
DBA'nın yapmak istediği, hem Owners_PersonId hem de Friends_PersonId öğelerini aynı tabloda depolamak yerine, Friends_PersonId dosyasını depolamak için üçüncü bir tablo tblArkadaşlar oluşturmak ve tblNetwork'in sahip olması (NetworkID int identity PK, Owner_PersonID int) FK, FriendsID int FK (TBLArkadaşlar'den)). Bütün bu tbl'lerin evlerine ev sahipliği yapardı (FriendsID int kimliği PK, Friends_PersonID (Kişilerle ilgili olarak)).
Bana göre, üçüncü tabloyu oluşturmak doğada aşırı bir şeydir ve Friends_PersonID için bir takma ad oluşturmaktan başka bir şey yapmaz ve benim tüm sorgularıma eklememem için eklemem gerekir (gereksiz olarak gördüğüm gibi). Her sorguda birleştirme gerçekleştirmek için gerekli olacak ek döngüleri belirtin.
Ben teknik olarak, isteyen ne mümkündür, ancak en iyi uygulama ile inline olduğunu anlıyoruz? En iyi uygulama ne olurdu?
Okuduğunuz için teşekkürler, yorumları takdir edin.
Ryan
Sanırım sorunuzda biraz fazla hikayeniz var :) – ChaosPandion
Muhtemelen haklısınız. Bunun üzerine çalışacağım. :) – devRyan
Seçenek 1 bana doğru görünüyor. DBA neden bir veri ambarı ve bir web sitesi için farklı bir yol için bunu yapmasını önerdi? –