【问题标题】:Storing album track list in a database将专辑曲目列表存储在数据库中
【发布时间】:2011-07-19 15:00:01
【问题描述】:

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

|   id   |  name  | artist |description|  year  |

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

|   id   |  name  | album  | runtime |

并根据album 字段将其拉出。

你会怎么做呢?

【问题讨论】:

    标签: php mysql database-schema


    【解决方案1】:

    另一个表。

    调用专辑字段album_id,并将其作为外键返回专辑表。

    基本上,您不想将所有内容都存储在一张表中。

    这将使操作与轨道相关的数据变得更加困难。因为它不是以原子方式处理数据。您必须弄乱包含与您要编辑的内容无关的其他数据的整个字段,这可能会导致数据损坏。

    另一个原因是将概念也分离成良好的抽象,以便将来您和其他程序员清楚地理解它。例如我该去哪里上赛道?好吧,我去轨道表。我去哪里操作相册?好吧,我去专辑表。等等。

    【讨论】:

      【解决方案2】:

      您绝对应该选择第二个选项。想想你将如何使用 json 对象搜索曲目。如果有第二张桌子,这会容易得多!

      【讨论】:

        【解决方案3】:

        可能看起来有点像这样(未经测试)?

        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)
        
        );
        

        【讨论】:

          【解决方案4】:

          我会像你说的那样分解它,并在专辑 ID 上建立一对一的关系。我觉得干净多了……

          【讨论】:

          • 真的吗?一对一的关系?
          猜你喜欢
          • 2015-03-28
          • 1970-01-01
          • 2014-04-15
          • 2012-03-28
          • 2015-02-20
          • 2016-11-27
          • 2011-03-05
          相关资源
          最近更新 更多