2010-12-10 4 views
1

Was ist der Nachteil, wenn alle untergeordneten Tabellen als Fremdschlüssel mit allen darüber liegenden Tabellen in der Hierarchie verknüpft werden? Ich habe eine Standortkomponente mit 6-Lookup-Tabellen:Vorteil/Nachteil der Verwendung von Fremdschlüsseln an jedem Kind Tisch für alle Eltern/Großeltern, etc?

  • Kontinente
  • Länder
  • Regionen
  • Städte
  • Nachbarschaften
  • Art der

Offensichtlich jeder Ebene der Lage ist ein Kind der oben genannten, so wird es Fremdschlüssel für die Eltern, aber was ist der Schaden, wenn ich sie alle zusammen Fremdschlüssel, dass mein Tisch haben Städte haben:

Stadt Tisch

  • continent_id (fk Kontinent)
  • country_id (fk zu Land)
  • region_id (fk Region)

vs nur 'rEGION_ID-fk Region haben? Der Vorteil, den ich auf meinem Weg sehe, ist, wenn ich Städte auf einem Kontinent nachschlagen muss, kann ich direkt von Stadt zu Kontinent gehen, ohne in die Region zu springen, dann in Land und Kontinent, aber natürlich bin ich mir der Nachteile nicht sicher Dies beeinträchtigt die Leistung oder irgendetwas anderes?

Dies ist eine einzige Tabelle. Ich habe viele Tabellen so, also versuche ich, das Konzept zu verstehen, also kann ich es verwenden, um andere Tabellen auch auf meinen anderen Bestandteilen zu entwerfen, die viel mehr als 6 Nachschlagetabellen sind.

Antwort

1

Der Schaden ist in der denormalization (aka Duplikation) von Daten.

Wenn Sie bereits über die FK-Verknüpfungen verfügen, bedeutet das Wiederholen in der letzten Tabelle in der Hierarchie, dass Sie Daten wiederholen, und wenn Sie sie ändern müssen, haben Sie sie nicht an mehreren Stellen.

Darüber hinaus können Sie mit Ihrem Multi-FK-Schema, wenn Sie nicht mehr Prüfeinschränkungen hinzufügen, inkonsistente Daten in der Tabelle city (wo ein Land und der Kontinent nicht übereinstimmen) erhalten.

+0

Aber was übergewichtet was hier? Ist es besser 2-3-4 Joins zu machen, um die Elterntabelle zu erreichen oder sie über fks denormalisieren zu lassen, so dass es eine direkte Beziehung zwischen allen gibt? Ich nehme an, da alle Tabellen über FK in Beziehung stehen, gibt es keine Duplizierung als solche, weil sie alle zusammenhängen. Es ist also nicht so, dass ich "New York" in einer Tabelle und "New Yk" in der nächsten eingeben kann. also werden die gleichen Daten existieren - ja, aber es wird immer in allen Tabellen genau sein. Dies ist ein soziales Netzwerk, so dass Leistung wichtig ist, daher bin ich mir nicht sicher. – mikey

+0

@mikey - Mit Ihrem Multi-FK-Schema können Sie eine Stadt in den USA und in Afrika haben, es sei denn, Sie fügen weitere Prüfbedingungen hinzu. – Oded

+0

Beispiel: wie Chicago nach Illinois nach USA nach Nordamerika. ja, wenn ich eine falsche fk id in der tabelle für land eingeben könnte es gehen: Chicago nach Illinois nach Afrika nach nordamerika. Aber ich nehme an, dass es dort ist, wo es einen Fehler gibt, weil es einen FK für Chicago nach Illinois und Illinois nach USA in der Regionstabelle gibt, also wird es prüfen, ob 'Illinois nach Afrika' in der Regionstabelle nicht gültig ist und a Verbindung zwischen Chicago nach Afrika im Stadttisch? – mikey

0

@mikey - sorry, ich glaube nicht, dass ich den Ruf habe auf der anderen Antwort zu kommentieren - trotzdem:

Für die denormalised, Ansatz Single-Table, würde keine zusammengesetzter Primärschlüssel auf dem fünf (sechs?) Spalten genügen?

Eine weitere Überlegung bei der Entscheidung zwischen dem denormalisierten oder dem normierten Ansatz mit einer Tabelle lautet: Welche zusätzlichen Attribute speichern Sie für die Entitäten auf höherer Ebene? Speichern Sie beispielsweise nur Städtenamen oder wollen Sie auch Breiten-/Längengradpaare, Telefonvorwahlcodes, solche Dinge? Je mehr Attribute Sie speichern möchten, desto mehr Duplizierung (und damit verbundene Datenverwaltungsprobleme) erhalten Sie in einem denormierten Modell.

0

Ich mache normalerweise keine transitiven Fremdschlüssel auf diese Weise.Im Allgemeinen führt dies zu vielen zusätzlichen Kopfschmerzen und vielen zusätzlichen Möglichkeiten für Probleme. Halte die Dinge einfach. Ich sehe das nicht als ein Problem der Denormalisierung. Es geht nur darum, die Dinge überschaubar zu halten. Berücksichtigen Sie die folgenden Punkte:

Es gibt eine Reihe von Fällen, in denen der zusätzliche redundante Fremdschlüssel Sie beißen kann. Da es zwangsweise erzwungen wird, lass es weg.

Verwandte Themen