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?

Schema Teil unserer Datenbank

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?

Beispiel Bild

  

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.

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top