我正在开展一个项目,您可以在其中处理各种项目。它是什么并不重要,这是我担心的数据库设计。如果有人能给我一些关于我应该如何为此创建数据库布局的见解,或者只是指出我正确的方向,我将不胜感激。
一个列表中的所有类型的项目
假设您有项目列表。你可以有一个 CD 列表、一个 DVD 列表和一个书籍列表。这意味着 1 个列表在数据库术语中有许多项目,列表的 id 在项目行中。
但是,如果您想列出所有与超级马里奥相关的东西,包括原声 DVD、那部可怕的真人电影和一些基于水管工生活的同人小说,该怎么办。
我突然意识到,在绘制我的数据库时,那些属于同一个列表的项目不能在同一个表中,因为它们都有不同的列来支持艺术家/专辑标题、导演/电影标题、作者/小说标题等。我不可能把所有东西都放在一张大桌子上。
最重要的是,我想在我的数据库中拥有原声专辑的曲目标题和电影的演员。如果我只有 CD,我可以轻松地将专辑曲目表附加到我的项目表,但我不能只是将各种不同的表附加到我的项目表,因为如果我这样做对性能来说不会太好想要获取某个列表的所有项目及其所有详细信息。该程序必须搜索所有附加的表格以查找列表的引用,即使该列表不包含任何书籍、黑胶唱片、漫画、电视剧、植物、家具等……</p>
我现在拥有的是以下布局(但我无法想象这是最好的方法):
t_list (id) --> t_item (id, id_list, image)
t_item --> t_cd (id, id_item, artist, title)
t_item --> t_dvd (id, id_item, director, title)
t_item --> …
t_cd --> t_cd_track (id, id_cd, track_title, length)
t_dvd --> t_dvd_actors (id, id_dvd, actor_name, image)
…
自定义列
现在,假设要将这些项目添加到 cd 列表,您将有一个带有输入字段的表单,根据表 t_cd 中的列(艺术家、专辑标题、流派……)。我希望能够添加一个自定义输入字段,例如专辑的平均价格。
这是为特定列表的特定用户设置的。这不是在项目级别上设置的,因为这意味着它将添加到每个人的表单中。我只想将该字段添加到我自己的 CD 列表中。
但是,它仍然需要与项目相关,因为需要在数据库中填写该值。
我正在考虑这样的事情:
t_list (id) --> t_extra_field (id, description, id_list)
t_extra_field --> t_field_value (id, id_extra_field, value)
但我不完全确定在我的数据库方案中将其附加到何处。
这种结构也能回答我之前的问题吗?( t_field --> t_field_value
) 如果是这样,我也不知道该附在哪里。也许要列出,就像我在上面的例子中建议的那样?
这意味着某个项目的所有详细信息都在一个表中,但值一个值,而不是单个记录,根据某种类别的 ID,来自另一个表,附加到项目。那将是一个有很多记录的表,这再次提出了我的问题:这对性能不是很糟糕..?
我真诚地希望有人能给我一些关于此事的见解..