我可以用人工PK定义识别关系吗?

时间:2012-08-30 21:14:36

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

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

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(标题为“考虑因素”)识别和不识别关系“)?

1 个答案:

答案 0 :(得分:2)

  1. 没有。密钥是一种逻辑的数据完整性功能;表现取决于许多其他事情。

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