Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 我可以定义与人工PK的识别关系吗_Sql Server_Entity Framework_Ef Code First_Foreign Keys - Fatal编程技术网

Sql server 我可以定义与人工PK的识别关系吗

Sql server 我可以定义与人工PK的识别关系吗,sql-server,entity-framework,ef-code-first,foreign-keys,Sql Server,Entity Framework,Ef Code First,Foreign Keys,我在我的项目中有几个模型,它们确实应该使用标识关系,但出于速度和简单性的原因,我用独特的自动增量主键设置了它们。例如,联系人中的电子邮件地址: 公共类电子邮件地址 '这是当前的主键 公共属性EmailAddressID为整数 “这三个属性实际上构成了与联系人的标识关系中的复合主键 公共属性ContactID为整数 作为字符串的公共属性地址 作为字符串的公共属性域 末级 关于此设置,我有两个问题: 在复合密钥中包含nvarchar字段是否真的会降低DB的速度,足以保证不使用它(因为我被引导相信学

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

公共类电子邮件地址
'这是当前的主键
公共属性EmailAddressID为整数
“这三个属性实际上构成了与联系人的标识关系中的复合主键
公共属性ContactID为整数
作为字符串的公共属性地址
作为字符串的公共属性域
末级
关于此设置,我有两个问题:

  • 在复合密钥中包含
    nvarchar
    字段是否真的会降低DB的速度,足以保证不使用它(因为我被引导相信学校)
  • 如果1为“是”,是否有办法(在数据注释或Fluent API中)通知EF这实际上是一种与人工主键的识别关系,因此(在标题“识别和非识别关系的注意事项”下)
  • 否。密钥是一种逻辑、数据完整性功能;性能取决于许多其他因素

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


  • 据我所知,该模型在概念上已经是一种识别关系,只是在数据库中没有这样定义。如果EmailAddress绝对是联系人的100%依赖子项(我不希望EmailAddress在没有联系人的情况下存在),是否有任何理由不更改我的DB模式以反映这一点?