首页 >数据库 >mysql教程 >我应该规范化还是使用连接表来将列表存储在数据库列中?

我应该规范化还是使用连接表来将列表存储在数据库列中?

Linda Hamilton
Linda Hamilton原创
2024-12-26 15:03:10894浏览

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

在数据库列中存储列表:规范化与连接表

当需要在数据库中存储对象列表时列,例如与 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn