在mysql中替代逗号分隔的字段,字段中包含任何可能的值和值的数量

tjvv9vkg  于 2022-12-17  发布在  Mysql
关注(0)|答案(1)|浏览(113)

我有一个名为tracks的表,其中包含字段idcomposer,字段composer可能只有一个名称,也可能是两个用逗号分隔的名称,或者是一百个用逗号分隔的名称,这似乎是一个糟糕的做法,并且使得编写查询变得非常复杂,因为composer的每个值都必须被视为一个值。
我可以创建更多的字段,比如composer2composer3等,最多可以创建100个,但是第二天我可能会有一个包含101个名字的值,有什么更好的方法来将这些数据存储到mysql数据库中呢?

zfycwa2u

zfycwa2u1#

更好的方法:另一张table
你所拥有的被称为多值属性,你的例子中你可以拥有多达100个 composer ,这表明你的意思是没有固定的限制。
你知道SQL中还有什么没有固定的限制吗?* 行数。*
通常的做法是将多值属性的每个值存储在其自己的行中,并引用回主表。

CREATE TABLE Tracks (
  id INT PRIMARY KEY
  ... other single-valued attributes of a track ...
);

CREATE TABLE Composers (
  id INT PRIMARY KEY
  ... composer name and other attributes of a composer ...
);

CREATE TABLE TrackComposers (
  trackId INT,
  composerId INT,
  PRIMARY KEY (trackId, composerId),
  FOREIGN KEY (trackId) REFERENCES Tracks (id),
  FOREIGN KEY (composerId) REFERENCES Composers (id)
);

此示例中的TrackComposers表实现了轨道与 composer 之间的多对多关系。对于每个轨道,TrackComposers中可能有多行。每行引用一个轨道和一个 composer 。
这样你就不会对给定曲目的 composer 数量有任何限制,而且你还有其他好的功能,比如很容易找到某个人创作的所有曲目。

相关问题