在数据库列中存储列表:可以完成吗?
当面临在数据库中存储复杂对象(如列表)的任务时关系数据库,问题出现了:这可以在遵守数据库规范化原则的情况下完成吗?
在提供的例如,感兴趣的对象 FOO 包含水果列表。要求是将此列表保留在数据库列中。然而,传统的关系数据库模式不鼓励在单列中存储列表等非结构化数据。
关系数据库方法
解决方案在于称为联结的非规范化设计桌子。在这种方法中,我们创建一个单独的表 FOOFruits,它存储 FOO 对象及其包含的水果之间的关系。该表中的每一行代表特定 FOO 对象和水果之间的链接。
定义表结构:
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) );
通过使用这种方法,我们确保数据完整性并避免不一致同时保持 FOO 和 Fruits 表的引用完整性。
例如,将水果“Apple”添加到 FOO 对象中ID=5:
INSERT FOOFruits(FooID, FruitID) SELECT 5, ID FROM Fruits WHERE name = 'Apple';
此方法允许高效查询和检索与每个 FOO 对象关联的水果列表。
以上是列表可以有效地存储在关系数据库列中吗?的详细内容。更多信息请关注PHP中文网其他相关文章!