2016-05-14 2 views
-1

Ich habe eine CUSTOMERS Tabelle und eine CONTACTS Tabelle die Beziehung zwischen ihnen ist eins zu viele offensichtlich. auch ich habe PROJECTS Tabelle und PROJECT_CUSTOMERS Tabelle mit Beziehung eins zu vielen und in Beziehung eins zu eins zwischen CUSTOMERS und PROJECT_CUSTOMERS. mein Problem ist, dass ich eine fünfte Tabelle habe PROJECT_CONTACTS .... Ich kann nicht herausfinden, welche Tabellen soll ich in diesen Tabellen beziehen, zZ ziehe ich PROJECT_CUSTOMERS und CONTACTS Tabelle, ist das korrekt oder gibt es etwas besseres?Kann nicht umgehen, wie Fremdschlüssel für 'Projekt-Kunden-Kontakte' Beziehung zu verwalten

+0

"Offensichtlich eins zu viele"? Zwei Kunden können nicht den gleichen Kontakt haben? Dito für Projekte. (Mit Konsequenzen für "eins zu eins"). – philipxy

+0

Zwei Kunden können nicht den gleichen Kontakt haben –

+1

Könnten Sie das Problem/den Kontext/die Situation hier weiter erklären? Wie @philipxy sagte, für uns ist es nicht offensichtlich, etwas von Ihrem Problem, wir kennen den wahren Kontext hier nicht. Einfach ausgedrückt, könnten Sie den Grund für die Existenz dieser Beziehungen zwischen diesen Tabellen erklären? Damit kann ich dir helfen. – Loa

Antwort

0

Ihr Titel bezieht sich auf "Fremdschlüssel", aber Ihre Frage scheint nur darüber zu sein, welche Spalten in welche Tabellen gehören sollten.

Entscheiden Sie zunächst, welche Situationen auftreten können und was Sie darüber sagen wollen/müssen. (Dies sind Ihre Tabellen, Spalten, Kandidatenschlüssel, Fremdschlüssel und Einschränkungen.)

Jede Tabelle enthält Zeilen, die ein Prädikat (Anweisungsvorlage, die durch Spaltennamen parametrisiert wird) auf true setzen. Ihr Design zu haben scheint:

CUSTOMERS(id, ...) -- ID identifies a customer and ... 
CONTACTS(id, ...) -- ID identifies a contact and ... 
PROJECTS(id, ...) -- ID identifies a project and ... 
PROJECT_CUSTOMERS(pid, cust_id, ...) -- project PID has customer CUST_ID and ... 
PROJECT_CONTACTS(pid, cont_id, cust_id)...) 
    -- project PID has contact CONT_ID and project pid has customer CUST_ID and ... 

Ein Fremdschlüssel hat eine Tabelle & Spaltenliste Bezugnahme auf eine Tabelle und Spaltenliste, die einen Kandidatenschlüssel bildet. Es besagt, dass Wertelisten in der ersten Tabelle als Wertelisten in der zweiten Tabelle erscheinen. Wo das so ist, deklariere einen Fremdschlüssel.

+1

Ich habe meine Antwort leicht bearbeitet. 1. Ich habe * die obigen Kommentare (die die Tabellen und Spalten bestimmen) über das, was Sie über Situationen sagen wollen, erraten. * Du * musst * uns * sagen, was sie wirklich sind. 2. Was ist das erste, was du nicht verstehst? – philipxy

+0

schön, jetzt ist meine Frage: sollte sich PROJECT_CONTACTS.cust_id auf PROJECT_CUSTOMERS.cust_id oder auf CUSTOMERS.id beziehen? ..... auch sollte sich PROJECT_CONTACTS.pid auf PROJECT_CUSTOMERS.pid oder auf PROJECTS.id beziehen ...... beachten Sie, dass CONTACTS eigentlich CONTACTS (id, cust_id, .....) ist, wobei sich cust_id auf CUSTOMER.id bezieht –

+0

"[Ein FK] sagt, dass Listen von Werten in der ersten Tabelle als Listen von Werten in der zweiten Tabelle angezeigt werden. Wo das so ist, deklarieren Sie einen Fremdschlüssel." Also wieder PROJECT_CONTACTS: Wenn 'Projekt-PID Kontakt CONT_ID hat und Projekt-PID Kunde CUST_ID und ...' hat, wird es auch wahr, dass 'CUST_ID einen Kunden identifiziert und ...' für einige '...' Parameter? Dh wenn 'CONT_ID' in einer Tabelle erscheint, erscheint es in der anderen? Und wird es auch wahr sein, dass "Projekt-PID Kontakt CONT_ID hat und Projekt-PID Kunden CUST_ID und ..." für einige "CONT_ID" & "..." Parameter hat? PS Nochmal: Bitte geben Sie die * richtigen * Kommentare ab. – philipxy