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