如何在db列中存储列表
我想将一个对象FOO存储在数据库中。 可以说FOO包含三个整数和一个“ 水果 ”列表。
该列表可以有任何长度,我知道的唯一的事情是所有的水果允许存储在另一个表。
我可以将水果列表存储在列中吗?
在规范化的关系数据库中,这种情况是不可接受的。 您应该有一个联结表,为FOO对象的每个不同ID和果实的ID存储一行。 这样一排的存在意味着果实在这个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) )
要将Apple水果添加到ID = 5的特定FOO对象的列表中,您应该:
INSERT FOOFruits(FooID, FruitID) SELECT 5, ID FROM Fruits WHERE name = 'Apple'
如果你确信自己在做什么(例如,你不需要查看列表的值),你也可以序列化你的对象,或者只是列表对象,并将其存储在一个二进制文件柱。
只是字符分隔的价值可能也是罚款,并在保存和加载方面更便宜,但要小心你的数据不包含分隔符或逃生(并在处理相应的加载等相应的逃生…你select的语言可能比你做得更好,但是…))
但是,对于一个“适当的”解决scheme,请按照Mehrdad的描述。
其技术上可能,但将是非常糟糕的devise,伊莫。
您可以通过构buildstring并将其存储在nvarchar(max)字段(如果使用sql server或其等价物)中来完成。
某些数据库允许将多个值存储在单个行的单个列中,但使用单独的表格通常会更方便。
创build一个包含两列的表,一列包含指向对象表主键的指针,另一列包含指向水果表主键的指针。 然后,如果一个对象有三个水果,则object_fruit表中有三行都指向相同的对象,但是指向三个不同的水果。
你可以,但它可能会被视为文本,使在这个专栏search困难和缓慢。 你最好使用相关的表格。
INSERT FOOFruits (FooID, FruitID) SELECT 5, ID FROM Fruits WHERE name IN ('Apple', 'Orange');