设计引用另一个表中多个记录的表的最佳方法是什么?
例如,有一个名为diary的表存储主题,描述和关键字,然后是另一个名为DiaryCompilation的表,用于通过引用日记中的id将所有选定的记录合并到一本书中。
创建DiaryCompilation的最佳方法是什么?
我想把它组成两个字段:id,references
所有选定的记录都放在参考文献中,但这是一种好的做法还是有更好的方法?
答案 0 :(得分:0)
Diary和DiaryCompilation会有1对多的关系。只需确保将DairyCompilation中的Id设置为主键并对其设置外键约束,以便它与日记表中的Id绑定。这将阻止您删除日记并孤立DiaryCompilation表中的记录。只要你有一个标准化的数据模型,你应该没问题。
答案 1 :(得分:0)
<--- Each record is a new entry of diary --->
Diary: ID, Subject, Description, Keywords
<--- Single record per compilation for summary info --->
DiaryCompilation: ID, Title
<--- Pages of Diary Compilation --->
DiaryCompilationEntries: DiaryCompilationID, DiaryID
答案 2 :(得分:0)
保持你的领域是原子的。在references
字段中放置多个值会使查询和强制引用约束变得更加困难。
父母与子女之间的1:N关系是通过将父母的主键迁移到子来建模的。在你的情况下,这看起来像这样:
COMPILATION (
COMPILATION_ID PK
-- Other fields...
)
DIARY (
DIARY_ID PK
COMPILATION_ID FK(COMPILATION)
SUBJECT
DESCRIPTION
)
-- Not a good idea to have several keywords in a single field, so we need a separate table for keywords.
DIARY_KEYWORD (
DIARY_ID PK, FK(DIARY)
KEYWORD PK
)
如果你真的想要N:N关系(即日记可以是多个编辑的一部分),你需要一个专用的表来保存这些连接,如下所示:
COMPILATION (
COMPILATION_ID PK
)
DIARY_IN_COMPILATION (
COMPILATION_ID PK, FK(COMPILATION)
DIARY_ID PK, FK(DIARY)
)
DIARY (
DIARY_ID PK
SUBJECT
DESCRIPTION
)
DIARY_KEYWORD (
DIARY_ID PK, FK(DIARY)
KEYWORD PK
)
答案 3 :(得分:0)
创建DiaryCompilation的最佳方法是什么?
听起来像最佳方式可能是使用视图而不是表格。