0

我有一个艺术家实体。一位艺术家最多可以有 3 张图片(和最少一张)和一首带有标题的歌曲。

所以我的第一个想法是将图片存储在一个单独的表格Picture中,id,artist_id,path。
并将歌曲存储在带有 id、artist_id、path、title的Song实体中

另一个想法是将这些媒体存储在具有 id、artiste_id、picture1、picture2、picture3、path_song、title_song的媒体表中。

最好的方法是什么?

任何帮助都会很棒!

4

2 回答 2

2

嗯,对当前需求建模的最精确方法是将 3 张图片和 1 首歌曲直接作为字段存储在 Artist 表中。在这种情况下,几乎不需要垂直拆分 Artist 并制作单独的 Media 表。


唯一的问题是:你确定你永远不需要超过 3 张图片和超过一首歌曲吗?如果没有,请执行第一种方法,但我会按以下方式对其进行修改:

在此处输入图像描述

CHECK (PICTURE_NO BETWEEN 1 AND 3)
CHECK (SONG_NO = 1)

识别关系和 CHECK的组合确保了期望的最大值得到遵守。如果您需要增长,只需​​修改(或完全删除)CHECK。

不幸的是,在这个模型中不能保证最小值(至少存在一张图片和歌曲),至少在不使用延迟循环引用的情况下不能保证,即使你的 DBMS 支持它们,这也可能比它们的价值更麻烦。


当然,在现实生活中,一件艺术品可能涉及多个艺术家。您确定关系是 1:N 而不是 N:N?

于 2013-02-12T13:10:34.633 回答
0

从数据库规范化的角度来看,您的第一个想法是更好的想法。

于 2013-02-12T11:52:10.360 回答