C# 用于从另一个表编译记录的数据库设计

C# 用于从另一个表编译记录的数据库设计,c#,sql,sql-server,C#,Sql,Sql Server,设计引用另一个表中多条记录的表的最佳方法是什么 例如,有一个名为diary的表存储主题、描述和关键字,然后是另一个名为DiaryCompilation的表,用于通过引用日记中的id将所有选定记录合并到一本书中 创建日记汇编的最佳方法是什么 我想把它分成两个字段:id和references 所有选定的记录都放在参考文献中,但这是一种良好的做法还是有更好的方法?日记和日记编辑将有一对多的关系。只需确保DairyCompilation中的Id设置为主键,并对其施加外键约束,以便它与日记表中的Id绑定。

设计引用另一个表中多条记录的表的最佳方法是什么

例如,有一个名为diary的表存储主题、描述和关键字,然后是另一个名为DiaryCompilation的表,用于通过引用日记中的id将所有选定记录合并到一本书中

创建日记汇编的最佳方法是什么

我想把它分成两个字段:id和references


所有选定的记录都放在参考文献中,但这是一种良好的做法还是有更好的方法?

日记和日记编辑将有一对多的关系。只需确保DairyCompilation中的Id设置为主键,并对其施加外键约束,以便它与日记表中的Id绑定。这将防止您删除日记并孤立日记编译表中的记录。只要您有一个规范化的数据模型,您就可以了


<--- 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
日记:ID、主题、描述、关键字 日记编辑:ID,标题 日记编译条目:日记编译ID,日记ID
保持字段的原子性。在
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
)
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
)
如果您确实想要N: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
)
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
)
创建日记汇编的最佳方法是什么

听起来最好的方法可能是使用视图而不是表