Ich habe derzeit eine Datenbank mit zwei Tabellen namens Artikel und Tags. Um Artikel in mehreren Kategorien zuzulassen, habe ich eine Beziehung zwischen vielen und vielen. Ist es ein Fehler, ein solches Design in Bezug auf die Leistung zu haben? oder sollte ich die Beziehung zwischen diesen beiden Tabellen entfernen und eine dritte Tabelle als Brücke hinzufügen (articlesTags)?Viele-zu-viele-Beziehung im Datenbankdesign
Antwort
Es gibt nichts inhärent falsch mit einer Viele-zu-viele-Beziehung, Sie müssen nur eine Junction Table erstellen (was es klingt wie Sie mit articlesTags
beziehen), um diese Beziehung zu erleichtern.
Es gibt kein Problem mit einer Viele-zu-Viele-Beziehung, wenn dies die Daten erfordern, aber Sie möchten eine 3. Tabelle, um sie darzustellen.
Ich würde sagen "Sie werden eine dritte Tabelle benötigen." – Dave
In einem relationalen Modell existiert eine Viele-zu-Viele-Beziehung, es ist nur eine Abstraktion des Geistes. Wenn Sie es implementieren werde es eine articles_to_tags Tabelle, wo Sie haben:
fk_article (INTEGER) fk_tag (INTEGER)
Es gibt kein Problem, das viele bei der Verwendung zu vielen Beziehungen. Es ist oft erforderlich.
Und ja, es ist nicht möglich, eine viele zu viele Relation zu erstellen, ohne eine dritte Tabelle zu verwenden.
Sie sehen den Unterschied zwischen einem konzeptionellen Datenbankentwurf (die N: N-Beziehung) und seiner physischen Realisierung. Unabhängig davon, wie Sie Ihre N: N-Beziehung modellieren, benötigen Sie die oben genannte Junction-Tabelle, damit sie funktioniert.
Es ist nichts falsch daran, eine reale Beziehung so realitätsnah wie möglich zu modellieren. Klarheit ist König.
Wenn es zu irgendeiner Leistungsfrage in irgendeinem System kommt, läuft die Antwort normalerweise auf "es hängt ab".
Wenn Ihr Leistungsproblem mit WRITES zusammenhängt, ist eine sehr NORMALISIERTE Struktur am besten, und Sie werden diese Junction-Tabelle benötigen. Sie werden am Ende viel weniger Daten schreiben und das kann die Dinge wesentlich beschleunigen (obwohl Sie diesen Vorteil verbrennen können, indem Sie nachschlagen müssen, bevor Sie die Beilagen erstellen). Das Lesen von den einzelnen normalisierten Tabellen kann auch sehr schnell sein.
Wenn Ihr Problem mit analytischen READS verbunden ist, dann ist eine DENORMALISED Struktur am besten. Joins können sehr leistungsintensiv sein, wenn die Tabellen groß sind und die Indizes sich ausbreiten. Sie werden viel Platz opfern, um viel Zeit zu gewinnen.
Im Allgemeinen möchten Sie die Besonderheiten Ihrer Situation betrachten und die Vor- und Nachteile jedes Ansatzes abwägen, bevor Sie sich für eine Lösung entscheiden. Persönlich habe ich es immer besser gefunden, mich in den Anfangsphasen auf Clarity zu konzentrieren und die Performance zu verbessern, wenn ich später ein Problem entdecke.
- 1. Vererbung im Datenbankdesign
- 2. Stundenzettel Datenbankdesign
- 3. F: Datenbankdesign - Fotogalerie
- 4. Banner Impressions Tracking - Datenbankdesign
- 5. E-Commerce-Datenbankdesign?
- 6. Music daypart Datenbankdesign
- 7. mongodb datenbankdesign (produktvorschlag)
- 8. Ist dieses schlechte Datenbankdesign?
- 9. Ein besseres Datenbankdesign?
- 10. Gilt YAGNI für das Datenbankdesign?
- 11. Wie man ein Datenbankdesign präsentiert?
- 12. Relationales Datenbankdesign Gute Praxis: Normalisierung?
- 13. "Weekly Top 10" Datenbankdesign Ausgabe
- 14. Wie kann ich mein Datenbankdesign zeichnen?
- 15. gutes Datenbankdesign: enum Werte: Ints oder Strings?
- 16. Datenbankdesign - Milliarden von Datensätzen in einer Tabelle?
- 17. Nicht relationales Datenbankdesign mit SQL Server?
- 18. Ist es eine gute Idee, rowguid als eindeutigen Schlüssel im Datenbankdesign zu verwenden?
- 19. Was ist ein gutes Datenbankdesign (Schema) für eine Anwesenheitsdatenbank?
- 20. Gutes Datenbankdesign für den Abruf und Vergleich von 2D-Datenfeldern?
- 21. Wo finde ich eine Liste von Anti-Patterns für Datenbankdesign?
- 22. Können Sie ein Datenbankdesign für Quizfragen und -antworten empfehlen, das eine erweiterbare Anzahl von Fragetypen ermöglicht?
- 23. Wie erstellt man ein Datenbankdesign, um das Produkt als neues Produkt und beliebtes Produkt zu speichern?
- 24. Was ist eine gute Ressource für das Datenbankdesign in Bigtable/S3/Azure Style-Datenbanken?
- 25. Ist es schlecht, den Benutzernamen als Primärschlüssel für das Datenbankdesign zu verwenden?
- 26. Was ist ein guter Ansatz für das Datenbankdesign für Stunden Betrieb?
- 27. Die beste Methode zum Anwenden von Entwurfsmustern für ein bestimmtes Datenbankdesign in C# -Klassen
- 28. Wie Hibernate Annotationen OnetoOne im Frühjahr verwendenMvc?
- 29. Anklickbare Links im WebBrowser-Steuerelement im Bearbeitungsmodus
- 30. Bilder im Platzhalter im Fokus anzeigen
Wie haben Sie eine Viele-zu-Viele-Beziehung ohne die Verwendung einer articlesTags-Tabelle erstellt? – flayto
Wenn Sie eine Viele-zu-Viele-Beziehung haben, brauchen Sie die dritte Tabelle - es gibt keine vernünftige Alternative. Ihr nächster Ansatz könnte eine SET-Struktur in jeder Tabelle sein - wenn Ihr DBMS dies unterstützt. Aber es gibt normalerweise nicht viel Vergleich zwischen diesen Typen - die separate Tabelle ist notwendig. –