在数据库列中存储列表:规范化与连接表
当需要在数据库中存储对象列表时列,例如与 FOO 对象关联的水果列表,规范化和连接表之间的选择
标准化禁止将列表存储在单个列中。这种方法为列表项创建一个单独的表,保留数据完整性并减少冗余。
但是,就我们的水果列表而言,这种方法并不理想。水果 ID 是固定的并存储在另一个表中。标准化需要在水果表中为列表中的每个水果创建一个新行,这将导致数据膨胀和复杂性。
连接表 另一方面,提供了替代解决方案。它在 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) )
添加 Apple使用联结表将水果添加到 ID=5 的 FOO 对象的列表中:
INSERT FOOFruits(FooID, FruitID) SELECT 5, ID FROM Fruits WHERE name = 'Apple'
这种方法消除了标准化的需要,并提供了管理 FOO 对象和水果列表之间关系的有效方法。
以上是我应该规范化还是使用连接表来将列表存储在数据库列中?的详细内容。更多信息请关注PHP中文网其他相关文章!