Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fremdschlüssel für mehrere Tabellen und Spalten?

Sie müssen den Artikelnamen nicht in beide Tabellen aufnehmen. Dies wird als denormalisierte Lösung bezeichnet. Sie sollten es nur in der Artikeltabelle haben und sich nur auf die ID beziehen. Wenn Sie dann auch den Namen benötigen, können Sie es anhand des Primärschlüssels (ID) hinzufügen. Andernfalls ist es in meinem völlig in Ordnung Meinung.

CREATE TABLE user(
  id INT(11) NOT NULL AUTO_INCREMENT,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(20) NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE items(
  i_id INT(11) NOT NULL AUTO_INCREMENT,
  name TINYTEXT NOT NULL,
  price DECIMAL(8,2) NOT NULL,
  PRIMARY KEY (i_id)
);

CREATE TABLE user_purchase(
  i_id INT(11) NOT NULL,
  name TINYTEXT NOT NULL,
  id INT(11) NOT NULL,
  FOREIGN KEY (i_id) REFERENCES items(i_id),
  FOREIGN KEY (id) REFERENCES user(id)
);

Manchmal, wenn die Leistung kritisch ist, müssen Sie denormalisierte Tabellen verwenden. Es kann viel schneller sein.

Die Normalisierung ist wichtig, um verschiedene Anomalien zu vermeiden. Wenn Sie Tabellen in einer Normalform auf hoher Ebene haben, sind Ihre Tabellen nicht redundant und weisen diese Anomalien nicht auf. Wenn Sie beispielsweise etwas an mehreren Orten gespeichert haben, müssen Sie sich darum kümmern, alle redundanten Daten auf dem neuesten Stand zu halten. Dies gibt Ihnen die Möglichkeit, dies falsch zu machen und am Ende verschiedene Anomalien zu haben.

In Ihrer Situation hilft Ihnen ein Fremdschlüssel, die Datenintegrität zu wahren, aber ohne einen Fremdschlüssel für den Namen könnten Sie Artikel mit Namen in den Einkäufen haben, die nicht in der Artikeltabelle vorhanden sind.

Das ist eine Art Anomalie.

Es gibt viele Arten davon, am besten vermeidest du sie so lange du kannst.

Lesen Sie hier mehr über Anomalien

In einigen Fällen müssen Sie denoralisieren. Speichern Sie daher einige Daten aufgrund von Leistungsproblemen redundant. Auf diese Weise können Sie einige Join-Operationen sparen, die viel Zeit in Anspruch nehmen könnten.

Einzelheiten zur Normalisierung werden in den Themen der verschiedenen Normalformen behandelt:NF0, NF1, NF2, NF3 und BCNF

Normalformen im Detail

Weitere Einzelheiten zu den mathematischen Grundlagen der verlustfreien Zerlegung in höhere Normalformen finden Sie unter "Funktionale Abhängigkeiten". Dies wird Ihnen helfen zu verstehen, warum Sie die IDs "redundant" halten können. Sie sind praktisch eine notwendige Redundanz, da Sie sie benötigen, um später den Originaldatensatz wieder aufbauen zu können. Dies wird die Definition für die verschiedenen Normalformen sein. Welches Maß an Redundanz ist zulässig?

Funktionale Abhängigkeiten