歌词网站的数据库设计

时间:2009-09-18 06:01:36

标签: php mysql database

我是PHP和MySQL的新手。对于我的项目,我想创建一个歌词网站。如何设计数据库和关系?

这是我到目前为止所做的:

艺术家

  • Artist_id
  • ARTIST_NAME
  • Artist_bio
  • Artist_thumb

相册

  • Album_id
  • Artist_id
  • Genre_id
  • ALBUM_TITLE
  • RELEASE_YEAR

类型

  • genre_id
  • GENRE_NAME

:跟踪

  • track_id
  • TRACK_TITLE
  • album_id

如果我错了,请告诉我。

6 个答案:

答案 0 :(得分:13)

  1. 与你的是否一致 表名是单数或复数。我的偏好是单数,因为当您进行多表查询时,您可以将列简称为“track.id”,而不是“tracks.id”。

  2. 确保您的所有表格和字段 名称拼写正确(即 “类型”);这是一个 以后要改变的痛苦。

  3. 最后,我不建议在列名前加上父表的名称。这只是多余的。


  4. <强>艺术家

    • ID
    • 名称
    • 生物
    • 拇指

    相册

    • ID
    • artist_id
    • genre_id
    • 标题
    • RELEASE_YEAR

    <强>类型

    • ID
    • 名称

    <强>轨道

    • ID
    • 标题
    • album_id

答案 1 :(得分:7)

我强烈建议WWWSQLDesigner设计您的数据库。 brianreavis提到的指南真的值得倾听。始终使用正确的拼写,使用一致的语法,大小写和下划线(_)。您也可以考虑使用关系表添加多个类型。

  album_genre ( id int, album int, genre int )

对于专辑或艺术家图片,我建议您将它们保存到具有相关ID的文件夹中。观察,

 id = 14
 artist = 42
 title = Mask And Mirror
 year = 1994

 thumbnail: /thumbnails/album-14.jpg

答案 2 :(得分:5)

你的设计看起来很不错。您可能想要添加的一些其他表:

  • 播放列表
  • PlaylistTrack
  • PlayedTrack

您可以在Track表中添加其他字段。例如:

  • trackSortOrder
  • trackYear
  • trackGenre
  • 径迹长度
  • userRating
  • 比特率
  • 作者
  • 版权
  • numberOfPlays
  • lastPlayedDate
  • dateAdded

答案 3 :(得分:3)

设计时应该问自己的重要问题

  • 我的要求是什么!?!在您的情况下,我的歌词网站应该包含哪些信息?它应该告诉我谁真正写了这首歌吗?什么时候写的?谁都唱过那首歌等等。 首先,你要定义范围! 你的实体和数据库设计将取决于那个!
  • 我的实体是什么?
  • 我的主要实体之间的关系是什么?

您的设计可能非常下降,可能完全符合您的要求,但取决于您愿意处理的复杂程度(要求范围!),您可能需要处理以下事项:

  • 艺术家和专辑实际上有很多关系。许多艺术家可能会在同一张专辑上工作,当然一位艺术家会有多张专辑。您当前的设计将会解决这个问题,但是当多位艺术家合作制作专辑时,您是否希望复制genreId,title,release_year?在创建另外一个表和存储重复值之间需要权衡。您当前的设计可能非常适合您的工作,但只是想确保您已经考虑过它
  • 在现实世界中,多位艺术家合作撰写一首歌。大部分歌曲都是由其他人写的,并由其他人演唱。 您需要定义艺术家对您的意义。是唱这首歌的人吗?是写歌的人吗?这两位艺术家?如果我搜索没有唱过一首歌的歌曲的作者,它应该返回结果吗?
  • 我没看到你要存放歌词的表格!但我想你已经知道了:)

我可以看到一些可能会在以后引起问题的事情,但正如我所说,我不知道你的要求范围是多少! :)

答案 4 :(得分:0)

您在几个地方混淆了多种不同类型的对象 - 例如,您似乎正在尝试创建适用于专辑,艺术家和曲目的单个rating表格。仔细考虑是否可以更容易为三种不同类型的评级分别设置三个表。

同样适用于comment。此外,在该表上,您当前的结构(在专辑,艺术家或曲目上只有一个comment_id)似乎会将每种类型的对象限制为只有一个注释,这没有任何意义。

对于genretypethumb,请考虑将这些表格内联到父对象中。例如,在多个艺术家之间共享一个拇指行是否有意义,或者让每个艺术家直接存储thumb路径会更容易吗?

最后,对于你所绘制的所有关系,你需要定义关系的基数。对于每一个,定义哪个表引用另一个表,并且一个表中的“多少”行可以存在于另一个表中的每一行中。例如,albumtrack之间的关系是一对多关系,因为每个专辑包含多个曲目,但每个曲目属于一个专辑。使用诸如“crow's foot notation”之类的表示法来表示此信息。

答案 5 :(得分:-4)

如何为专辑和一个公用表创建一个单独的表来定义所有其他表之间的关系?