sql geschlossene Schleife Beziehungen; was könnte schiefgehen?
-
19-09-2019 - |
Frage
Ich arbeite mit einer Datenbank mit dem folgende Design. Ich las es keine gute Praxis ist geschlossene Schleifen in einem Datenbank-Design zu haben, und ich habe mehr als eine. Aber ich kann mich nicht erinnern, warum. Also nicht sicher, wie dies mich beeinflussen könnte. Alle Beispiele, wie dies könnte gefährlich sein?
Edit: ging durch meine E-Books, gefunden, was ich las war Anfang Datenbank-Design vom Anfänger bis zum Profi , Herausgeber:. APRESS
sie warnen nur gegen diesen, sondern einen vageen Grund geben, warum. Nein, wir sind nicht mit Trigger. Jeder hat eine deutlichere Erklärung?
Vielen Dank
Auszug, S. 109:
Ein kleines Unternehmen hat Mitarbeiter, die jede Arbeit für einen von einer Reihe von verschiedenen kleine Projektgruppen. Jede Gruppe und alle sind seine Mitarbeiter in einem untergebracht Insbesondere Zimmer mit größeren Räumen mehrere groups.We kann das Gehäuse erfordern Informationen wie dem jedes Mitarbeiter befindet, eine besondere Mitarbeiter Telefonnummer, wo sie zu finden eine bestimmte Gruppe, die Mitarbeiter in jeder Gruppenarbeit, die in jeweils Zimmer, und so weiter. Eine mögliche Daten Modell ist in Abbildung 5-7 abgebildet. nehmen Sie ein Moment, das Datenmodell zu verstehen und die darin enthaltenen Informationen über die Anzahl der Gruppen in einem Raum und so auf für dieses spezielle Problem. Das Modell hat redundante Informationen. Kann Sie sehen, was es ist?
Mit Bezug auf das Beispiel 5-3, wenn wir regelmäßig will einen Mitarbeiter finden Telefonnummer, könnte denken wir, dass die top Beziehung in Figur 5-7 zwischen Mitarbeiter und Raum wäre ein nützliches direkte Route. Doch dieses gleiche Informationen sind sehr leicht verfügbar durch eine alternative Route durch Group. Wir können die (nur einer) der Mitarbeiter finden Gruppe und dann diese Gruppe (eins finden nur) Raum. Dies ist eine sehr einfache Abruf (es beinhaltet nicht alle Komplikationen mit Terminen, dass geplagt Die kleine Hostel in Beispiel 5-2). Allerdings ist die zusätzliche Beziehung nicht nur unnötig, ist es gefährlich. Mit zwei Routen für die gleichen Informationen, riskieren wir zwei bekommen verschiedene Antworten, es sei denn die Daten sehr sorgfältig gepflegt. Jedes Mal, wenn ein Mitarbeiterwechsel oder eine Gruppe Verschiebungen Zimmer, wird es zwei sein Beziehungsinstanzen zu aktualisieren. Ohne sehr vorsichtig Aktualisierung Verfahren, könnten wir am Ende mit dass Jim ist in Gruppe A, welche in Raum 12, während die andere Route kann hat Jim assoziiert direkt mit Zimmer 15. Redundante Informationen ist anfällig für Inkonsistenzen und sollte immer sein, entfernt.
Lösung
Ich habe keine Probleme in der Vergangenheit mit „Closed-Loop“ Referenzen zwischen Gruppen von Tabellen (das heißt mindestens 3 in der Beziehung Schleife) habe. Die einzige Frage, die ich denken kann wäre, wenn Sie Trigger verwenden, und selbst dann wäre es nur ein Problem sein, wenn Sie die anderen Tabellen in der „Schleife“ im Trigger aktualisieren.
Haben Sie eine Referenz für, wo Sie lesen diesen Rat für nicht geschlossene Schleifen mit?
Um die andere, die das Bild kommentiert gesehen werden kann, wenn Sie auf den Link in neuem Fenster kopieren: http: // Imgur .com / ChFL1
Andere Tipps
Nicht alle Datenbanken haben latente Beziehung Prüfung aktiviert und nicht alle Datenbanken erlauben das Einfügen zwei Datensätze in zwei verschiedenen Tabellen in einer Erklärung.
Stellen Sie sich eine FOREIGN KEY
von A
zu B
haben und von B
zu A
.
Zunächst sind beide Tabellen leer.
Wie werden Sie den ersten Datensatz einfügen?
Sie kann nicht einfügen, etwas zu A
da es zu einem Datensatz in B
beziehen (die leer ist), und in der gleichen Art und Weise kann man nicht Einsatz etwas in B
.
Ich würde nicht sagen, dass „es keine gute Praxis geschlossene Schleifen zu haben“. Allerdings haben sie die Aufmerksamkeit auf ein mögliches Problem ziehen. So ist es eine gute Gewohnheit wäre, alle geschlossenen Schleifen für die Möglichkeit dieses Problem zu überprüfen.
Das Textbuch Beispiel scheint mir ganz klar. Es gibt zwei Möglichkeiten, in denen die Lage / Telefon des Mitarbeiters bestimmt werden kann:
- Mitarbeiter -> Gruppen -> Zimmer -> Telefon
- oder Mitarbeiter -> Zimmer -> Telefon
Das ist wie zwei Variablen für die gleiche Sache zu speichern, die synchron werden müssen gehalten. Es wird die Möglichkeit, dass etwas schief geht und die Variablen am Ende mit unterschiedlichen Werten - dann muss man fragen: „Welche der beiden richtig ist“
So Textbuch Beispiel Highlights das Problem Sie haben unsere achten. Allerdings läuft darauf hinaus das Problem wirklich auf Semantik . D. h was bedeuten die Beziehungen. In dem Lehrbuch Beispiel bedeuten, beide Wege zu Room
genau das gleiche. Wenn jedoch die Group -> Room
waren lediglich ein ‚Standard‘ für jeden Mitarbeiter, weil leitende Mitarbeiter konnten ihr eigenes Zimmer bekommen, oder Mitarbeitern vorübergehend zur Arbeit aus ihrer Gruppe woanders weg zugeordnet werden können, dann ist die zusätzliche Beziehung gerechtfertigt wäre.
Wechsel auf Ihr Design, das ist, was Sie tun sollten:
- Geben Sie für geschlossene Gruppen Beurteilen Sie
- die Semantik / Zweck / Bedeutung der Beziehungen
- Überprüfen Sie, dass Sie nicht nur erstellt zwei Pfade genau das gleiche Information .
Zum Beispiel, Sie haben:
- Testprobe -> Coil -> Slab
- Testprobe -> Plate -> Slab
( Verzeihen Sie das möglicherweise absurde Verständnis Ihrer Terminologie .) Heißt das, Ihre Testprobe auf zwei verschiedene Platten zugleich sein kann? Oder bedeutet es, Ihre Testprobe aus einer Platte hergestellt wird, und eine Spule, die (aber nicht notwendigerweise) kommt aus verschiedenen Platten haben könnte?