2009-07-06 13 views
1

In meinem aktuellen Projekt habe ich Daten über Farben. Jede Farbe ist entweder eine echte Farbe (mit RGB-Werten) oder eine "Containerfarbe", die aus mehreren Farbschichten besteht.
Dies schafft potentiell zirkuläre Referenzen, die auf Anwendungsebene gefangen werden müssen (aber das ist another question)Wie definiere ich Tabellenrelationen in einer Zirkelreferenz?

So habe ich

Colors 
------ 
+ (PK) Id 

ColorComposition 
----------- 
+ (PK) Id 
+ (FK) MotherColorId 
+ (FK) ChildColorId 

Als ich sie zu meinem Linq2Sql Schema hinzufügen bekomme ich seltsame Beziehungen. Das lässt mich an meiner Struktur zweifeln.

sollte Eine Farbe 0 bis viele ColorCompositions haben (Color.Id => ColorComposition.MotherColorId)
A ColorComposition sollte

Die erste Beziehung haben viele auf 1 Farbe (ColorComposition.ChildColorId => Color.Id) ist richtig interpretiert, aber die zweite nicht. Es ist in die falsche Richtung.
Wie sollte ich die letzte Beziehung in Bezug auf Fremdschlüssel definieren?

+0

Ich habe noch nicht verstanden. Ist MultiColor eine Kombination von nur zwei Farben, oder Sie versuchen, n Farben wie eine "verknüpfte Liste" darzustellen (das Kind von einem ist eine Mutter in einem anderen)? –

+0

Dupe von http://stackoverflow.com/questions/1079548/could-this-circular-data-reference-be-designed-besser von demselben Benutzer –

+0

Bitte lesen Sie beide Fragen erneut. Sie beziehen sich auf die gleiche Situation, aber sie befassen sich mit einem anderen Problem. –

Antwort

3

Es klingt, als ob Sie versuchen, einen azyklischen gerichteten Graphen zu speichern. Versuchen Sie, sql azyklischen gerichteten Graphen zu googeln. Hier ist das Top-Ergebnis:

A Model to Represent Directed Acyclic Graphs (DAG) on SQL Databases

Ihr 'Multicolor' Tisch hat einen verwirrenden Namen. Erwägen Sie, es in "ColorComposition" zu ändern?

+1

Sie haben mich dazu geschlagen. Ich würde einen anderen Namen als MultiColor verwenden, aber es ist etwas verwirrend. Wie wäre es mit CompositeColor? –

+0

Es ist im Grunde der Name, den das Unternehmen diesem System gab, also denke ich, dass ich den Namen dafür behalten werde. –

+0

Nun, es war eine interessante Lektüre und tatsächlich fällt mein Problem in diese Kategorie. Obwohl es viel einfacher ist als die Situationen dokumentiert. Ich denke, ich kann mich von hier aus finden, danke. –

0

Fügen Sie einen anderen Spaltennamen wie Status hinzu und fügen Sie die Mutter und das Kind in diese Spalte ein. Verwenden Sie nur eine fkColourid in der Multicolor-Tabelle gemäß ID. Aktualisieren Sie den Status in dieser Statusspalte, nachdem Ihre Beziehung einwandfrei funktioniert.

+0

Ich verstehe das nicht wirklich. Schlägst du vor, die beiden IDs in einer Spalte zu fassen? –

+0

Nein Definieren Sie eine Spalte anstelle von zwei separaten Spalten und fügen Sie einen weiteren Spaltenstatus zu dieser Spalte hinzu. Sie können wissen, dass fkcolurid für Kind oder Eltern ist. – KuldipMCA

Verwandte Themen