我对PHP和MySQL还不熟悉。我的项目是一个歌词网站。如何设计数据库和关系?
以下是我目前的设计:
艺术家
- 艺术家ID
- 艺术家姓名
- 艺术家简介
- 艺术家头像
专辑
- 专辑ID
- 艺术家ID
- 流派ID
- 专辑名称
- 发行年份
流派
- 流派ID
- 流派名称
曲目
- 曲目ID
- 曲目名称
- 专辑ID
如果有错误,请告诉我。
我对PHP和MySQL还不熟悉。我的项目是一个歌词网站。如何设计数据库和关系?
以下是我目前的设计:
艺术家
专辑
流派
曲目
如果有错误,请告诉我。
在表名是单数还是复数方面保持一致。我更喜欢使用单数形式,因为这样,在执行多表查询时,可以简单地引用列名 "track.id
",而不是 "tracks.id
"。
确保所有的表和字段名称都拼写正确(例如 "genre");这是以后难以更改的事情。
最后,我不建议在列名前加上父表的名称。这只是多余的。
艺术家
专辑
流派
音轨
track.id
,但是你也需要使用 select * from track
,在我看来,这种写法不如 select * from tracks
自然。 - Dominic Rodger album_genre ( id int, album int, genre int )
对于专辑或艺术家图片,我建议您将它们保存到一个带有相关id的文件夹中。请注意,
id = 14
artist = 42
title = Mask And Mirror
year = 1994
thumbnail: /thumbnails/album-14.jpg
你的设计看起来相当不错。以下是一些你可能想要添加的额外表格:
你可以向曲目表格添加其他字段。例如:
trackSortOrder
在 track
表中的作用是什么? - Dominic Rodger在设计过程中应该要问自己的重要问题:
你的设计可能非常好,并且可能完美地适合你的需求,但根据你处理的复杂程度(需求范围!),你可能需要注意以下事项:
我可以看到还有一些可能会在以后给你带来麻烦的事情,但正如我所说,我不知道你的需求范围! :)
您在几个地方混淆了多种不同类型的对象--例如,看起来您正在尝试创建一个适用于专辑、艺术家和曲目的单个rating
表。请仔细考虑是否更容易为这三种不同类型的评级分别建立三个单独的表。
对于comment
也是同样的情况。此外,在该表上,您当前的结构(在专辑、艺术家或曲目上有一个单一的comment_id
)似乎会限制每种类型的对象只能有一个评论,这是没有意义的。
对于genre
、type
和thumb
,请考虑将这些表内联到父对象中。例如,是否有可能存在一个单个的缩略图行被多个艺术家共享,或者直接将每个艺术家的thumb
路径存储在其中是否更容易?
最后,对于您绘制的所有关系,您需要定义关系的基数。对于每个关系,定义哪个表引用另一个表,并且在另一个表中每行可以存在多少行。例如,album
和track
之间的关系是一对多关系,因为每个专辑包含多个曲目,但每个曲目属于一个专辑。使用诸如“crow's foot notation”之类的符号表示此信息。
对于专辑,是否考虑单独建立一张表,并且再建立一张公共表来定义所有其他表之间的关系呢?