Heim >Datenbank >MySQL-Tutorial >Sollte ich eine Junction-Tabelle normalisieren oder verwenden, um eine Liste in einer Datenbankspalte zu speichern?

Sollte ich eine Junction-Tabelle normalisieren oder verwenden, um eine Liste in einer Datenbankspalte zu speichern?

Linda Hamilton
Linda HamiltonOriginal
2024-12-26 15:03:10894Durchsuche

Should I Normalize or Use a Junction Table to Store a List in a Database Column?

Speichern einer Liste in einer Datenbankspalte: Normalisierung vs. Verbindungstabelle

Wenn Sie mit der Notwendigkeit konfrontiert werden, eine Liste von Objekten in einer Datenbank zu speichern Spalte, beispielsweise eine Liste von Früchten, die einem FOO-Objekt zugeordnet sind, die Wahl zwischen Normalisierung und einer Verbindungstabelle entsteht.

Normalisierung verbietet die Speicherung einer Liste in einer einzelnen Spalte. Dieser Ansatz erstellt eine separate Tabelle für die Listenelemente, wodurch die Datenintegrität gewahrt bleibt und Redundanz reduziert wird.

Im Fall unserer Obstliste ist dieser Ansatz jedoch nicht ideal. Frucht-IDs werden festgelegt und in einer anderen Tabelle gespeichert. Eine Normalisierung würde das Erstellen einer neuen Zeile in der Fruchttabelle für jede Frucht in der Liste erfordern, was zu einer Aufblähung und Komplexität der Daten führen würde.

Eine Verbindungstabelle hingegen liefert eine Alternativlösung. Es stellt eine Viele-zu-Viele-Beziehung zwischen dem FOO-Objekt und der Obstliste her. Jede Zeile in der Verbindungstabelle stellt die Zuordnung zwischen einem bestimmten FOO-Objekt und einer bestimmten Frucht dar.

Hier ist ein Beispiel, wie eine Verbindungstabelle implementiert werden kann:

CREATE TABLE FOO (
  id int primary key not null,
  int1 int,
  int2 int,
  int3 int
)

CREATE TABLE Fruits (
  id int primary key not null,
  name varchar(30)
)

CREATE TABLE FOOFruits (
  FruitID int references Fruits (ID),
  FooID int references FOO(id),
  constraint pk_FooFruits primary key (FruitID, FooID)
)

So fügen Sie den Apfel hinzu Fruit zur Liste eines FOO-Objekts mit ID=5 mithilfe einer Junction-Tabelle:

INSERT FOOFruits(FooID, FruitID)
SELECT 5, ID FROM Fruits WHERE name = 'Apple'

Dieser Ansatz macht eine Normalisierung überflüssig und bietet eine effiziente Möglichkeit, das zu verwalten Beziehung zwischen FOO-Objekten und Fruchtlisten.

Das obige ist der detaillierte Inhalt vonSollte ich eine Junction-Tabelle normalisieren oder verwenden, um eine Liste in einer Datenbankspalte zu speichern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn