2009-09-18 73 views
4

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

这是我到目前为止有:

艺术家

  • Artist_id
  • 这位演出
  • Artist_bio
  • Artist_thumb

个相册

  • Album_id
  • Artist_id
  • Genre_id
  • ALBUM_TITLE
  • RELEASE_YEAR

流派

  • genre_id
  • GENRE_NAME

曲目

  • track_id
  • TRACK_TITLE
  • album_id

请让我知道,如果我WR翁。

+0

看起来不错。除“流派”拼写“流派”外,不包含“一般”。 – 2009-09-18 06:04:39

+14

除了事实上你已经把“流派”误以为“genere”,而你似乎没有地方可以存储歌词来追踪歌词,后者在歌词网站中似乎是一个相当基本的缺陷...... – 2009-09-18 06:05:16

+0

其实这是多米尼克的一个好点! :) – 2009-09-18 06:12:29

回答

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 
+0

我可能会再添加一个关于WWWSQLDesigner的东西,它也会从您的设计中生成表格创建查询。它是一个非常方便的工具。您可以在几分钟内为您的网站设置它。 – 2009-09-18 06:29:41

+0

感谢WWWSQLDesigner它使生活更轻松 – sunidhi 2009-09-18 06:48:41

-4

如何为专辑提供单独的表格以及定义所有其他表格之间关系的公用表格?

+0

错误...单个关系表?请问为什么? – 2009-09-18 06:15:02

+0

更多的外键引用可能会导致问题......我认为这可以简化数据库方案。 – 2009-09-18 06:18:44

+1

较少的关系表使外键约束变得不可能,而我认为这会导致更多的问题。单个关系表将如何建立? ''关系'与'column1'和'column2'?可读性如何加入?我宁愿为每种类型的关系都有一张桌子,而不是有更少的桌子。它将使数据库模式具有更多的部分,但它会使它不那么复杂。 – 2009-09-18 06:22:24

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

  2. 确保所有表格和字段 的名称拼写正确(即 “流派”);这是后来改变的一种痛苦。

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


艺术家

  • ID
  • 生物
  • 拇指

专辑

  • ID
  • artist_id
  • genre_id
  • 标题
  • RELEASE_YEAR

流派

  • ID

轨道

  • ID
  • 标题
  • album_id
+0

我正在写一个类似的回应;这个人是对的。 – 2009-09-18 06:14:42

+5

最后但并非最不重要的:有一个地方把实际的歌词! – 2009-09-18 06:15:45

+1

+1单数/复数表命名的事情是困难的 - 是的,你可以做'track.id',但你也''选择*从轨道',这自然不如'从轨道'选择*在我看来。 – 2009-09-18 06:16:16

5

你的设计看起来相当不错。一些额外的表,你可能要添加:

  • 播放列表
  • PlaylistTrack
  • PlayedTrack

你可以添加其他字段轨道表。例如:

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

'trackSortOrder'在'track'表中做什么? – 2009-09-18 06:23:28

+1

trackSortOrder将用于指定单个专辑中曲目的顺序。 – Brian 2009-09-18 06:25:41

+0

作为我们已经添加的艺术家,作品的使用是什么? Trackyear已经加入了专辑发行年份 – sunidhi 2009-09-18 06:47:55

3

你应该问自己一些重要的问题而设计

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

您的设计可能是相当的下降,可能会很好地工作为您的要求,但是这取决于你是多么复杂的多少愿意来处理,你可能要照顾的东西,如:

  • 艺术家和专辑实际上有多对多的关系。许多艺术家可能会在同一张专辑中工作,当然,一位艺术家会拥有多张专辑。你现在的设计会适应这个,但是你想让genreId,title,release_year在多个音乐人合作制作专辑时被复制吗?在创建另外1个表格和存储重复值之间涉及这里的权衡。你目前的设计可能对你所做的事情来说是完美的,但只是想确保你已经给它一个想法
  • 在现实世界中,多位艺术家合作写歌。大多数歌曲是由别人写的,并由别人唱歌。 您需要定义艺术家对您意味着什么。是唱这首歌的人吗?是谁写这首歌的人?都是艺术家吗?如果我搜索没有唱过单曲的歌曲的作者,它是否应该返回结果?
  • 我没有看到你正在存储歌词的表!但我想你已经知道:)

我可以看到更多的东西可能会导致你后来的问题,但正如我所说,我不知道你的要求范围是什么! :)

+0

这里是我现在做的 我增加了一个字段作为Artist_type知道它的歌手或作家。 现在我不知道如何解决多个艺术家的事情。 1首歌曲由许多歌手唱歌或由2名或以上作家撰写 – sunidhi 2009-09-18 08:40:57

+1

如果艺术家既是歌手又是作家? :)如果你开始设计并考虑需求,你会遇到很多问题。我建议,您首先要确定您的需求范围,例如您的网站提供的所有信息等等。一旦您完成设计,您将可以更轻松地进行设计。目前你正试图击中一个移动的目标。 – 2009-09-18 09:42:03

+0

我可以将歌曲的作者存储在另一个表格中吗?如果歌曲有不同的作者,那么它会在作家表格中创建一个记录,如果不是,它会使用与artrist相同的名字...如果我不那么会对我产生混乱 – sunidhi 2009-10-10 22:10:26

0

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

同样的事情发生在comment。此外,在该表格上,您当前的结构(在专辑,艺术家或曲目上拥有一个comment_id)似乎将每种类型的对象限制为仅具有一条评论,这是没有意义的。

对于genre,typethumb,考虑将这些表内联到父对象中。举个例子,在多个艺术家之间共享一个单独的拇指排是否合理?或者,如果让每个艺术家都直接存储一条thumb路径,会更容易吗?

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