首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB设计是否使用子类型?

DB设计是否使用子类型?
EN

Stack Overflow用户
提问于 2009-10-31 11:05:12
回答 4查看 2.3K关注 0票数 7

我正在设计的数据库有三个主要表:BOOKSARTICLESNOTES

每一本书或一篇文章都可以有多个笔记,我最初的设计就是这样,这意味着书上的笔记和文章上的笔记都放在“笔记”表上。下面是NOTES表的列:

  • note_id
  • note_type
  • note_type_id
  • note_content

NOTE_TYPE可以是“book”,也可以是“book_id”;NOTE_TYPE_ID是book_id的FK,如果note_type是“book”,则为“”,如果note_type是“”,则为。

现在,我开始怀疑这是否是正确的(或最好的规范化)设计。另一种方法是使用5个表。

书籍/文章/笔记/ book_notes / article_notes

通过这种方式,我可以将书签和文章注释分开保存,列就像

‘'notes’{ note_id,note_content } 'book_notes‘{ book_id,note_id } 'article_notes’{ articel_id,note_id }

哪一个是正确的还是更好?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-31 14:12:18

也许有一点不同的方法--超级类型/子类型通常是在每个子类型有非常具体的列时使用的,比如Person超级类型和病人和医生子类型。Person保存着所有人共有的所有数据,病人和医生为每个人保存非常具体的列。在本例中,您的book_notesarticle_notes并没有太大的不同。

我宁愿考虑以图书和文章作为子类型的超级出版物。然后,您可以只有一个笔记表与FK出版。考虑到出版中的PK编号与图书(文章)的PK、FK相同,您可以使用出版物、图书或文章的注释进行连接。通过这种方式,您可以简单地添加另一个出版物,如“杂志”,添加一个新的子类表,而不更改有关Note的任何内容。

例如:

代码语言:javascript
复制
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 (PK)
    , PublicationID = FK to Publication
    , NoteText
)

BookArticle表的主键也用作Publication的外键。

现在如果我们再加上另一个出版物,“杂志”:

代码语言:javascript
复制
TABLE Magazine (
    ID (PK) = FK to Publication
    , -- more columns specific to magazines only
)

我们不需要以任何方式修改Note --我们只添加了专门针对杂志的专栏。

票数 11
EN

Stack Overflow用户

发布于 2009-10-31 12:18:19

从某种角度来看,从长远来看,使用它要好得多。

书籍/ book_notes /文章/article注释

作为数据库的设计原则。

当您考虑备份、数据操作和数据可移植性时,在它自己的表中拥有单个实体的属性就会开始得到回报。

从绝对意义上说,两者都不是真正的“更好”,而是取决于背景。人们习惯于把任何东西放在符合要求的橱柜里,学术数据库设计师们倾向于为每支牙刷创建一个橱柜。

在您的上下文中,您可能会决定不值得为3个便笺表(而不是仅一个)增加sql insert/select/update/delete的开销。从长远来看,如果你最初使用"1便笺表“的设计,然后决定你不喜欢它,那么把它分成3不像重写战争与和平。

票数 2
EN

Stack Overflow用户

发布于 2009-10-31 17:30:00

NOTE_TYPE可以是“book”,也可以是“book_id”;NOTE_TYPE_ID是book_id的FK,如果 note_type是'book‘是文章id (如果note_type是’‘)。

这种关系在逻辑数据模型上表示时称为弧。

如果你没有预见到任何音符的重复,那就好了。不仅仅是书之间,还有文章之间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1654071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档