Wir haben eine Basistabelle, die Teile definiert und Informationen wie Teilenummer, Beschreibung, Preis, Gewicht usw. enthält. Wir haben auch ungefähr 400 Tabellen, die auf die Basistabelle verweisen und zusätzliche Informationen zu den Teilen basierend auf ihrem Typ / ihrer Kategorie bereitstellen.
Wir haben zunächst Fremdschlüsseleinschränkungen verwendet, damit ein Teil nicht aus der Basistabelle gelöscht werden kann, wenn auf es in einer der 400 teilespezifischen Tabellen verwiesen wird. Wir haben jedoch schnell die maximal 253 empfohlenen Fremdschlüssel für SQL Server 2005 erreicht.
Gibt es in dieser Situation Alternativen zu Fremdschlüsseln, die die Datenintegrität gewährleisten? Beim Zugriff auf die Daten sind keine Leistungsprobleme aufgetreten. Die Aktualisierung eines vorhandenen Teils in der Basistabelle schlägt jedoch fehl, da der Abfrageplan zu komplex ist.
quelle
Antworten:
Wenn es eine Möglichkeit gibt, Teile zu gruppieren, können Sie möglicherweise Zwischentabellen als Problemumgehung einführen. Das wird nicht funktionieren.
Aber etwas in diese Richtung könnte.
Ich möchte mir Ihre DDL genauer ansehen, bevor ich dies empfehle . Und wenn Sie dies tun, werfen Sie nicht überall ID-Nummern. Sie sollten in der Lage sein, "Tabelle 400" direkt mit "Teilen" zu verknüpfen, ohne "GreenBlueIndigoViolet-Teile" einzuschließen.
quelle
Wenn Sie Tabellen wirklich nicht kombinieren können, können Sie eine Basistabelle erstellen
TRIGGER
, um das Löschen zu verhindern.Beginnen Sie hier: http://msdn.microsoft.com/en-us/library/ms189799(v=sql.90).aspx
quelle
Ersetzen Sie die über 400 Tabellen durch eine. Benötigen Sie nur 3 Felder (+1 Autonummer oder welcher Primärschlüssel auch immer, wenn Sie es möchten, müssen Sie es nicht haben, Sie können es aus den anderen Feldern bilden)
Artikel-ID-Attributwert
Wo also in Ihren anderen Tabellen jedes Feld ein Attribut darstellt, befinden sich in dieser Tabelle alle Attribute in einem Feld. Du hättest so etwas
ItemID-Attributwert
Sockenmaterial Wolle
Sockenfarbe Rot
Sockengewicht 20 Pfund
Alien Planet Alpha Centauri
Alien Farbe Lila
Alien Friendly No.
Die ItemIDs sollten wahrscheinlich eine Zahl / alphanumerische Zahl von c sein. Anschließend erstellen Sie bei Bedarf nur eine Kreuztabelle mit Attributen als Spaltenüberschriften, um die gewünschten Tabellen zu generieren. Dies ermöglicht auch bessere Abfragen für Dinge wie "Zeig mir alle Gegenstände, die von Alpha Centauri stammen", die dir das Alien und auch das Meteoritenfragment zurückgeben könnten, das die Pest enthielt, die die Menschheit auslöscht (es kommt .....)
Die Optimierung kann schwierig sein, je nachdem, wie viele Datensätze vorhanden sind, aber es ist eine viel bessere Möglichkeit, dies zu entwerfen. Ich habe dasselbe für eine Datenbank gemacht, die eine Reihe von Rezepten (10k +) enthielt, die nur wenige Überlappungen aufwiesen. Hat in diesem Fall gut funktioniert. Hatte wirklich keine Geschwindigkeitsprobleme. Ihre kann schwieriger sein, je nachdem, mit wie vielen Sie es zu tun haben.
quelle
Entity
,Entity_Attribute
,Entity_Attribute_Value
). Wenn Sie eine halbgerechte Behandlung für verschiedene Datentypen und referenzielle Einschränkungen hinzufügen möchten, benötigen Sie mehr.