Frage

Ich bin den Aufbau einer Datenbanksystem und Probleme mit der Gestaltung einer meiner Tabellen.

In diesem System gibt es eine Benutzer-Tabelle, eine Objekttabelle, eine Positionstabelle und Kostentabelle.

Ein einzigartiger Rekord in der Kostentabelle ist durch den Benutzer, Objekt, Punkt und Jahr zu bestimmen. Es kann jedoch mehrere Datensätze sein, die im selben Jahr haben, wenn das Element unterschiedlich ist.

Die Hierarchie geht user-> object-> item-> Jahr mehrere einzigartige Jahre pro Stück, mehrere einzigartige Gegenstände pro Objekt, mehrere einzigartige Objekte pro Benutzer, mehrere einzelne Nutzer.

Was ist der beste Weg wäre, die Kostentabelle zu entwerfen?

Ich denke die Benutzer-ID von einschließlich, objectid und itemid als Fremdschlüssel und dann einen zusammengesetzten Schlüssel unter Verwendung von Benutzer-ID aus, objecid, itemid und costyear. Ich habe gehört, dass zusammengesetzte Schlüssel schlechtes Design, aber ich bin nicht sicher, wie dies zu strukturieren aus der Verwendung eines zusammengesetzten Schlüssel wegzukommen. Wie Sie meine Datenbank kann sagen, bauen Fähigkeiten sind ein wenig eingerostet.

Danke!

P. S. Wenn es darauf ankommt, ist dies ein ınterbase db.

War es hilfreich?

Lösung

, um den zusammengesetzten Schlüssel zu vermeiden, müssen Sie nur einen Ersatzschlüssel definieren. Dies gilt einen künstlichen Wert, zum Beispiel ein Auto-Zähler.

Sie können nach wie vor (und sollte) definieren eine eindeutige Einschränkung für diese Spalten.

BTW: es ist nicht nur empfohlen, nicht zusammengesetzten Schlüssel zu verwenden, ist es auch empfehlenswert, Ersatzschlüssel zu verwenden. In allen Tabellen.

Andere Tipps

Verwenden Sie ein intern erzeugte Schlüsselfeld (so genannten Ersatzschlüssel), so etwas wie CostID, dass die Nutzer sehen, nie aber eindeutig jeden Eintrag in der Kostentabelle identifizieren (in SqlServer, Felder wie Unique oder IDENTITY würde den Trick tun.)

Versuchen Sie, Ihre Datenbank mit einem zusammengesetzten Schlüssel den Aufbau mit genau die Spalten Sie skizziert, und sehen, was passiert. Sie werden angenehm überrascht. Sicherzustellen, dass es keine fehlenden Daten in diesen vier Spalten ist, und dafür zu sorgen, dass keine zwei Zeilen mit den gleichen Wert in allen vier Spalten wird die Integrität Ihrer Daten zu schützen.

Wenn Sie einen zusammengesetzten Primärschlüssel deklarieren, wird die Reihenfolge der Spalten in der Erklärung nicht die logischen Folgen der dclaration beeinflussen. Doch der Composite-Index, dass das DBMS baut auch für Sie die Spalten in der gleichen Reihenfolge haben, und die Reihenfolge der Spalten in einem zusammengesetzten Index hat die Leistung auswirken.

Bei Abfragen, die nur ein, zwei oder drei dieser Spalten angeben, wird der Index nutzlos, wenn die erste Spalte im Index eine Spalte nicht in der Abfrage angegeben. Wenn Sie im Voraus wissen, wie Sie Ihre Anfragen an mich sind gonig, und welche Abfragen am meisten benötigt, schnell zu laufen, kann dies helfen, die Spalten für den Primärschlüssel in der richtigen Reihenfolge zu erklären. In seltenen Fällen die Schaffung von zwei oder drei zusätzliche eine Spalte Indizes können einige Abfragen beschleunigen, um die Kosten für Updates zu verlangsamen.

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