将专辑曲目列表存储在数据库中

时间:2011-07-19 15:00:01

标签: php mysql database-schema

我有一个项目即将要求我存储一些音乐专辑的信息。我在想一个简单的专辑表,其中包含以下字段:

|   id   |  name  | artist |description|  year  |

但我想知道存储曲目列表的最佳方法是什么。我可以在专辑表中有另一个字段,并将轨道列表数据(轨道名称,轨道运行时间)存储为JSON对象或类似的东西,然后将其拉出并在我的应用程序中解析它,或者我可以有另一个名为tracklists的表格包含以下字段:

|   id   |  name  | album  | runtime |

并根据album字段将其拉出来。

你会怎么做呢?

4 个答案:

答案 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上有一对一的关系。我认为更清洁......