我有一个项目即将要求我存储一些音乐专辑的信息。我在想一个简单的专辑表,其中包含以下字段:
| id | name | artist |description| year |
但我想知道存储曲目列表的最佳方法是什么。我可以在专辑表中有另一个字段,并将轨道列表数据(轨道名称,轨道运行时间)存储为JSON对象或类似的东西,然后将其拉出并在我的应用程序中解析它,或者我可以有另一个名为tracklists
的表格包含以下字段:
| id | name | album | runtime |
并根据album
字段将其拉出来。
你会怎么做呢?
答案 0 :(得分:4)
另一张表。
调用相册字段album_id,并将其作为外键返回相册表。
基本上,您不希望将所有内容存储在一个表中。
这将使操纵轨道相关数据变得更加困难。因为它不是原子地处理数据。您必须弄乱整个字段,其中包含与您想要编辑的内容无关的其他数据,这可能会导致数据损坏。
另一个原因是将概念与好的抽象分开,以便将来和其他程序员清楚地理解。例如我在哪里可以去赛道?好吧,我去了轨道表。我在哪里操纵相册?好吧,我去专辑表。等。
答案 1 :(得分:0)
你绝对应该选择第二种选择。试想一下如何使用json对象搜索曲目。使用第二张桌子会更容易!
答案 2 :(得分:0)
可能看起来有点像(未经测试)?
CREATE TABLE album
(
album_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
description VARCHAR(400),
artist VARCHAR(400),
description VARCHAR(400),
year_released NUMBER(4),
);
CREATE TABLE track
(
track_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
album_id INT,
description VARCHAR(100),
order_no NUMBER(3),
runtime NUMBER(6),
INDEX albumfk (album_id),
FOREIGN KEY (album_id) REFERENCES album(album_id)
);
答案 3 :(得分:-2)
我会像你说的那样分解它并且在专辑ID上有一对一的关系。我认为更清洁......