【问题标题】:Can I define an identifying relationship with an artificial PK我可以用人工 PK 定义识别关系吗
【发布时间】:2012-08-25 16:46:22
【问题描述】:

我的项目中有几个模型确实应该使用识别关系,但出于速度和简单性的原因,我将它们设置为具有唯一的自动增量主键。例如,联系人中的电子邮件地址:

Public Class EmailAddress
    'This is currently the primary key
    Public Property EmailAddressID As Integer

    'These three properties really make a composite primary key in an identifying relationship with contacts
    Public Property ContactID As Integer
    Public Property Address As String
    Public Property Domain As String
End Class

我对此设置有两个问题:

  1. 在复合键中包含 nvarchar 字段是否真的会减慢数据库速度,足以保证不使用它(因为我在学校被引导相信)?
  2. 如果 1 为“是”,是否有方法(在数据注释或 Fluent API 中)通知 EF 这实际上是与人工主键的识别关系,因此 reap the benefits(在标题“识别和识别的注意事项”下)非识别关系”)?

【问题讨论】:

    标签: sql-server entity-framework ef-code-first foreign-keys


    【解决方案1】:
    1. 没有。密钥是一种逻辑的、数据完整性的特征;性能取决于许多其他因素。

    2. 在关系模型和 SQL 中,标识关系和非标识关系之间的区别非常小或根本不重要。您可能会发现这些术语有助于理解概念模型,但它们并不是制定数据库设计决策的真正基础。您所指的所谓“好处”本质上只是语法糖。

    【讨论】:

    • 据我了解,该模型在概念上已经是一种识别关系,只是在数据库中没有以这种方式定义。如果 EmailAddress 绝对是 Contact 的 100% 依赖子项(我不希望 EmailAddress 在没有联系人的情况下存在),是否有任何理由更改我的数据库架构以反映这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多