2016-03-28 19 views
1

Burada amacım, "Employee", "ID" çoklu kayıtlarına bir başvuru olması için COLUMNS ("assignedTo" , "loggedBy" , "completedBy") olmasıdır. Çok fazla ilişki olabileceğini farz etmeliyim, ancak bunun nasıl yapıldığını bilmiyorum uygulanmalı. "assignedTo", "loggedBy", "completedBy" birden çalışanları tarafından icra edilebilir (bu aynı zamanda bir çalışan olabilir ima her ederse1 Birincil Anahtar birden çok sütuna işaret ediyor

Screenshot of ERD

+0

Bir Görev'in kaydedilebildiğini söylüyorsunuz Gibi, birden çok Çalışanı çalıştırabilir, veya birden fazla Çalışanı çalıştırabilir ve benzer şekilde Çalışanların oturum açtıkları, atandıkları veya tamamladıkları birden çok şey olabilir mi?Bu sorunun doğru anlaşılması mı? – Ectropy

+0

Bu doğru –

cevap

1

Size @Bas önerdiği gibi/birleşme tabloları birleştirmek kullanmanız gerekir gibi görünüyor. için önemli olan

An example database structure using junction tables for 3 many to many relationships.

(My diyagram sanmıyorum diğer bazı tabloların dışarıda bırakır:

Ben böyle bir şey bakmak gerekir istiyorum ilişkileri yaratma fiili tabloları inanıyoruz Kavşak tabloları kullanan çoktan çoğa ilişkisi kavramını gösterir.)

Kayıt masanızda, sessionBy, assignTo ve completedBy sütunlarını kaldırdığımı fark edersiniz. Çok fazla ilişki kurduğunuzda onlara ihtiyacınız yok. Tablolar arasındaki bu bağlantılar hakkında bilgi, bağlantı tablolarında saklanır.

Neden bunu yapmak zorunda mıyız?

Sadece bir örnek olarak AssignedTo ilişkiyi kullanalım ... biz Görevler tablosundaki Çalışanların kimlikleri için sütunlar yapamaz bir görev için atanabilir kaç Çalışanlar bilmediğimize

. Aynı şekilde, bir Çalışana kaç tane Görev verilebileceğini bilmediğimizden, Çalışanlar tablosundaki Görevler'in kimlikleri için sütun oluşturamayız. Eğer denediysek, yeterli sütunumuz olmayabilir ya da çok fazla sütunumuz olabilir. Bunların ikisi de iyi sorunlardır. Bunun yerine, çoktan çoğa ilişkileri olan tablolar arasında bağlantı kurmak istediğimizde, ilgili bağlantı tablosuna yeni bir giriş koyarız. Herhangi bir sorun olmadan istediğimiz kadar bağlantı veya az bağlantı ekleyebiliriz. Biraz daha mantıklı

Umarım. İlişkisel bir veritabanında çoktan çoğa ilişkilerini modellemeye çalışırken, nesneler kesinlikle kafa karıştırıcı olabilir.

+0

Sonunda bunun nasıl çalıştığını anladım xD biraz zaman aldı ama buna değer. Tüm yardımın ve zamanın için sana yeterince teşekkür edemem. –

+0

Harika. Bu duyu duyduğuma sevindim! – Ectropy

1

:

İşte böyle benim veritabanı şu anda göründüğünü gösteren benim ERD bir ekran görüntüsü bir var birden "assignedTo", "loggedBy" veya "completedBy") o) Eğer önerildiği gibi (bir çok-çok ilişki olduğu anlamına gelir. (Bu 'ortak' tabloları ile Sütunlarınızın yerini alacak) "assignedTo", "loggedBy" ve "completedBy" her biri için çok-çok ilişki 'müşterek' tablosunu yapmak Bunu gerçekleştirmek için. Bunu, 'EmployeeTask' tablonuzla aynı şekilde yaparsınız. Bu 'ortak' tablo da 'İlişkilendirilmiş varlık' olarak adlandırılır. Wikipedia'ya bakınız: https://en.wikipedia.org/wiki/Associative_entity

Not: Bir ERD 'katılmak' tablo içermemelidir. Her iki tarafta da bire çok ilişki iki “karga ayak” kullanılarak modellenmiştir. Bu 'eklem' tabloları sadece 'Fiziksel Veri Modeli' (PDM) içinde görünecektir.

+0

bu "Görev" tablosunda "assignTo", "loggedBy" ve "completedBy" 'Birincil anahtarları yapmamı gerektirir? –

+1

@ T.Pilvelis Hayır, bunu yapma. Yabancı tuşlara bakın: http://www.w3schools.com/sql/sql_foreignkey.asp. Vikipedi tabloları https://en.wikipedia.org/wiki/Associative_entity – Bas

+0

Gerçekten de, ERD'nizde zaten birleşim/birleştirme tablosuna çok benzer bir şey var gibi görünüyor, yani “ÇalışanTask” tablo Bu tablonun amacı nedir? Görevlerin birçok çalışana ait olduğunu göstermeye çalışıyor gibi görünüyor ve bir çalışanın birçok görevi olabilir. Tanımladığınız 3 çoktan çoğa ilişkiyi yapmak için @Bas önerdiği gibi 3 bağlantı tablosuna ihtiyacınız olacaktır. – Ectropy

İlgili konular