如何解决表设计 - 建模层次结构问题,其中 2 个 1:许多实体都与第三个表相关
这是(我认为)一个通用问题,但这里有一个具体的例子。 假设:
-
Albums
每个都有 1-n 个Tracks
。 - 每个
Track
都在一个Album
中。 (即使“Logging with the Bloggs”同时出现在Bloggs 的第一张专辑 和Bloggs 的精选集中,对于我来说,这也是 2 个实体目的。) - 每个
Track
正好有一个Artist
。 -
Artists
有 1-nTracks
。 - 每个
Album
有 1 个Album_Artist
。 (其中所有Tracks
均来自 Bloggs,Album_Artist
为 Bloggs。其中Tracks
来自不同的艺术家,如伟大的日志歌曲集,Album_Artist
是各种。
我希望能够回答以下问题:
那么最好的表模型是什么?
目前我有一个 Artists
表,其中有一个 Isalbumartist 的布尔列?
然后 Tracks
有一个外键 Artist_id 和一个外键 Album_id 。
并且 Albums
有一个外键 Artist_id
但是最好有一个单独的 albumartists
表,还是现在考虑表继承?
感谢您提供任何设计信息和提示!
解决方法
-- Artist ART exists.
--
artist {ART}
PK {ART}
-- Make sure to add "Various" to the list of artists.
-- Album ALB by album-artist ART exists.
--
album {ALB,ART}
PK {ALB}
FK1 {ART} REFERENCES artist {ART}
-- Track number TR_NO of album ALB
-- performed by artist ART is named TR_TITLE.
--
track {ALB,TR_NO,ART,TR_TITLE}
PK {ALB,TR_NO}
AK {ALB,TR_TITLE}
FK1 {ALB} REFERENCES album {ALB}
FK2 {ART} REFERENCES artist {ART}
-- List all the Bloggs albums
--
SELECT ALB
FROM album
WHERE ART = 'Bloggs' ;
-- Find all the Bloggs tracks
-- with 'logging' in the title.
--
SELECT ALB,TR_TITLE
FROM track
WHERE ART = 'Bloggs'
AND TR_TITLE like '%logging%' ;
-- List all the album-artists
--
SELECT ART
FROM album ;
注意:
All attributes (columns) NOT NULL
PK = Primary Key
AK = Alternate Key (Unique)
FK = Foreign Key
这是一个简化的逻辑设计,将其用作概念证明。要为 PKs
使用(添加)整数或代码,请查看 this example。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。