Maison >base de données >tutoriel mysql >Les listes peuvent-elles être stockées efficacement dans une colonne de base de données relationnelle ?
Stockage d'une liste dans une colonne de base de données : est-ce possible ?
Lorsque vous êtes confronté à la tâche de stocker des objets complexes comme des listes dans un base de données relationnelle, la question se pose : cela peut-il être accompli tout en adhérant aux principes de normalisation de la base de données ?
Dans l'exemple fourni, l'objet d'intérêt, FOO, contient une liste de fruits. L'exigence est de conserver cette liste dans une colonne de base de données. Cependant, les schémas de bases de données relationnelles traditionnelles découragent le stockage de données non structurées telles que des listes dans une seule colonne.
L'approche des bases de données relationnelles
La solution réside dans une conception dénormalisée connue sous le nom de jonction. tableau. Dans cette approche, nous créons une table distincte, FOOFruits, qui stocke la relation entre les objets FOO et les fruits qu'ils contiennent. Chaque ligne de ce tableau représente un lien entre un objet FOO spécifique et un fruit.
Pour définir la structure du tableau :
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) );
En utilisant cette approche, nous garantissons l'intégrité des données et évitons les incohérences tout en conservant l'intégrité référentielle des tables FOO et Fruits.
Par exemple, pour ajouter le fruit "Pomme" à l'objet FOO avec ID=5 :
INSERT FOOFruits(FooID, FruitID) SELECT 5, ID FROM Fruits WHERE name = 'Apple';
Cette méthode permet une interrogation et une récupération efficaces des listes de fruits associées à chaque objet FOO.
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!