【发布时间】:2009-06-28 18:53:52
【问题描述】:
假设我们有这种情况:
Artist ==< Album ==< Track
//ie, One Artist can have many albums, and one album can have many tracks
在这种情况下,所有 3 个实体都具有基本相同的字段:
- 身份证
- 姓名
- 与对应的孩子(艺术家到专辑和专辑到曲目)的一对多关系的外国人
所提供解决方案的典型解决方案是三个表,在一对多关系字段中具有相同的字段(ArtistID、AlbumID 等)和外键约束。
但是,在这种情况下,我们可以合并一种继承形式来避免相同字段的重复吗?我在说类似的东西:
Table: EntityType(EntityTypeID, EntityName)
This table would hold 3 entities (1. Artist, 2. Album, 3. Track)
Table: Entities(EntityID, Name, RelField, EntityTypeID)
This table will hold the name of the entity (like the name of
an artist for example), the one-many field (foreign-key
of EntityID) and EntityTypeID holding 1 for Artist, 2 for Album
and so on.
您对上述设计有何看法?在这个 DB 场景中加入“OOP 概念”是否有意义?
最后,您更喜欢第一个场景的外键约束还是更通用的(例如,存在将艺术家与 Track 链接的风险,因为没有检查输入器外键值真的是专辑)的做法吗?
..btw,想想看,我想你实际上可以检查一个艺术家的 RelField 的输入值是否对应一个专辑,也许有触发器?
【问题讨论】:
-
您的专辑中没有多位艺术家吗?您的曲目中没有多个艺术家吗?您也不是在录制诸如演奏音乐的乐队(管弦乐队)、独奏家、指挥家、作曲家、编曲家等。嗯,这只是一个问题,但要小心过度简化。
标签: language-agnostic database-design oop entity-relationship