Maison >base de données >tutoriel mysql >Dois-je normaliser ou utiliser une table de jonction pour stocker une liste dans une colonne de base de données ?

Dois-je normaliser ou utiliser une table de jonction pour stocker une liste dans une colonne de base de données ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-26 15:03:10892parcourir

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

Stockage d'une liste dans une colonne de base de données : normalisation vs table de jonction

Face à la nécessité de stocker une liste d'objets dans une base de données colonne, comme une liste de fruits associés à un objet FOO, le choix entre une normalisation et une table de jonction se pose.

La normalisation interdit le stockage d'une liste dans une seule colonne. Cette approche crée un tableau séparé pour les éléments de la liste, préservant l'intégrité des données et réduisant la redondance.

Cependant, dans le cas de notre liste de fruits, cette approche n'est pas idéale. Les identifiants de fruits sont corrigés et stockés dans une autre table. La normalisation nécessiterait la création d'une nouvelle ligne dans la table des fruits pour chaque fruit de la liste, ce qui entraînerait une surcharge et une complexité des données.

Une table de jonction, en revanche, fournit un solution alternative. Il établit une relation plusieurs-à-plusieurs entre l'objet FOO et la liste de fruits. Chaque ligne de la table de jonction représente l'association entre un objet FOO spécifique et un fruit spécifique.

Voici un exemple de la façon dont une table de jonction peut être implémentée :

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)
)

Pour ajouter la pomme fruit à la liste d'un objet FOO avec ID=5 à l'aide d'une table de jonction :

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

Cette approche élimine le besoin de normalisation et fournit un moyen efficace de gérer le relation entre les objets FOO et les listes de fruits.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn