我正在设计的数据库有3个主要表:BOOKS,ARTICLES,NOTES.
每本书或文章都可以有多个笔记,我的原始设计就是这样,这意味着书上的注释和文章上的注释都会出现在“笔记”表中.以下是NOTES表的列:
每本书或文章都可以有多个笔记,我的原始设计就是这样,这意味着书上的注释和文章上的注释都会出现在“笔记”表中.以下是NOTES表的列:
> note_id
> note_type
> note_type_id
> note_content
NOTE_TYPE可以是’book’或’article’;如果note_type是’book’,则NOTE_TYPE_ID是book_id的FK;如果note_type是’article’,则NOTE_TYPE_ID是article id.
现在我开始怀疑这是否是正确的(或最佳标准化的)设计.另一种方法是使用5个表
书籍/文章/笔记/ book_notes / article_notes
这样我就可以分别保存书本笔记和文章笔记,列就像
‘notes'{note_id,note_content}
‘book_notes'{book_id,note_id}
‘article_notes'{articel_id,note_id}
哪一个更正或更好?
解决方法
也许有点不同的方法 – 当你为每个子类型都有非常特定的列时,通常会使用超类型/子类型,例如具有患者和医生子类型的Person超类型.人保存所有人共有的数据,患者和医生为每个人保留非常具体的列.在这个例子中,你的book_notes和article_notes并没有那么不同.
我宁愿考虑使用超类型出版物以Book和Article作为子类型.然后你可以只有一个带有FK to Publication的Note表.考虑到出版物中的PK编号与书籍(文章)的[PK,FK]编号相同,您可以加入出版物,书籍或文章的注释.
通过这种方式,您可以添加一个新的子类表而不更改有关Note的任何内容,只需添加另一个出版物,如Magazine.
我宁愿考虑使用超类型出版物以Book和Article作为子类型.然后你可以只有一个带有FK to Publication的Note表.考虑到出版物中的PK编号与书籍(文章)的[PK,FK]编号相同,您可以加入出版物,书籍或文章的注释.
通过这种方式,您可以添加一个新的子类表而不更改有关Note的任何内容,只需添加另一个出版物,如Magazine.
例如:
TABLE Publication (ID (PK),Title,...more columns common to any publication) TABLE Book (ID (PK) = FK to Publication,ISBN,... more columns specific to books only) TABLE Article (ID (PK) = FK to Publication,... more columns specific to articles only) TABLE Note (ID,PublicationID FK to Publication,NoteText)
Book和Article表的主键也可作为Publication的外键.
TABLE Magazine (ID (PK) = FK to Publication,... more columns specific to magazines only)
原文地址:https://www.jb51.cc/mssql/77527.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。