我有艺术家实体。艺术家最多可以有3张图片(最少一张)和一首带有标题的歌曲。
所以我的第一个想法是将图片存储在一个单独的表图片中,其中包含id,artist_id,path。
并将歌曲存储在带有id,artist_id,路径,标题的歌曲实体中
但另一个想法将这些媒体存储在带有id,artiste_id,picture1,picture2,picture3,path_song,title_song的 Media 表中。
最好的方法是什么?
任何帮助都会很棒!
答案 0 :(得分:2)
嗯,模拟当前要求的最精确方法是将3张图片和1首歌曲直接存储在Artist表格中的字段中。在这种情况下,几乎不需要垂直分割艺术家并制作单独的媒体表。
唯一的问题是:你肯定你永远不会需要超过3张图片和多首歌曲吗?如果没有,请执行第一种方法,但我会按以下方式对其进行修改:
CHECK (PICTURE_NO BETWEEN 1 AND 3)
CHECK (SONG_NO = 1)
identifying relationships和CHECK的组合可确保获得所需的最大值。如果你需要成长,只需修改(或完全删除)CHECK。
不幸的是,在这个模型中无法保证 minimums (至少有一张图片和歌曲的存在),至少在没有使用延迟循环引用的情况下,这可能比它们更麻烦即使您的DBMS支持它们也值得。
当然,在现实生活中,可能有多位艺术家参与了一件艺术品。你确定关系是1:N而不是N:N?
答案 1 :(得分:0)
从数据库规范化的角度来看,你的第一个想法是更好的想法。