SQL Server中主键和唯一索引之间的区别

悬崖公爵

我的公司目前正在重写我们最近购买的应用程序。我们选择使用ASP.net mvc4来构建此系统,以及使用实体框架作为ORM。我们收购的公司的前任所有者非常坚决,我们使用他们的旧数据库并且不对其进行任何更改,以便客户在我们开发不同模块时可以与旧系统同时使用我们的产品。

我发现旧表结构没有主键,而是使用唯一索引作为其主键。现在,当使用实体框架时,我尝试匹配其表的结构,但是由于EF生成主键而不是唯一索引,因此无法匹配。

当我联系上一位所有者并进行解释时,他告诉我:“每个表中的唯一键都是主键。它们彼此之间是同义词。”

我对数据库系统还比较陌生,所以我不确定这是否正确。谁能澄清一下?

他的表转储到SQL时会生成:

-- ----------------------------
-- Indexes structure for table AT_APSRANCD
-- ----------------------------
CREATE UNIQUE INDEX [ac_key] ON [dbo].[AT_APSRANCD]
([AC_Analysis_category] ASC, [AC_ANALYSI_CODE] ASC) 
WITH (IGNORE_DUP_KEY = ON)
GO

但是我的系统生成:

-- ----------------------------
-- Primary Key structure for table AT_APSRANCD
-- ----------------------------
ALTER TABLE [dbo].[AT_APSRANCD] ADD PRIMARY KEY ([AC_Analysis_category])
GO

编辑:对此的后续问题是我将如何为此设计模型?我只习惯使用将其定义为主键的[Key]批注,没有它,EF不会生成该表。所以像这样:

[Table("AT_APSRANCD")]
public class Analysis
{
    [Key]
    public string AnalysisCode { get; set; }
    public string AnalysisCategory { get; set; }
    public string ShortName { get; set; }
    public string LongName { get; set; }
}
亚德里亚·斯坦德

SQL UNIQUE约束

UNIQUE约束唯一地标识数据库表中的每个记录。

UNIQUE和PRIMARY KEY约束都为一列或一组列的唯一性提供保证。

PRIMARY KEY约束自动在其上定义了UNIQUE约束。

请注意,每个表可以有许多UNIQUE约束,但是每个表只能有一个PRIMARY KEY约束。

另外,从创建唯一索引

如果该列在多行中包含NULL,则不能在该列上创建唯一索引。同样,如果列的组合在多行中包含NULL,则不能在多列上创建唯一索引。出于索引目的,将它们视为重复值。

而从创建主键

在PRIMARY KEY约束中定义的所有列都必须定义为NOT NULL。如果未指定可空性,则所有参与PRIMARY KEY约束的列的可空性均设置为NOT NULL。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

主键(x,y)和主键(x),唯一(y)之间的SQL区别

来自分类Dev

SQL:添加唯一索引和添加唯一索引之间的区别?

来自分类Dev

在SQL Server中创建具有唯一索引但没有主键的表有什么影响?

来自分类Dev

sql server中“ =“和“ is”之间的区别

来自分类Dev

sql server中“ =“和“ is”之间的区别

来自分类Dev

MongoDb索引和SQL索引之间的区别

来自分类Dev

sql server:唯一约束生成唯一键和唯一索引

来自分类Dev

sql server:唯一约束生成唯一键和唯一索引

来自分类Dev

sql server:唯一约束生成唯一键和唯一索引

来自分类Dev

SQL:将主键添加到非唯一索引

来自分类Dev

“ OR”和“ ||”之间的区别 在SQL中?

来自分类Dev

在SQL Server中解析和转换之间的区别

来自分类Dev

SQL Server中的分区和页面之间的区别?

来自分类Dev

在SQL Server中“不为空”和“ <>空”之间的区别?

来自分类Dev

跨表的SQL Server唯一索引

来自分类Dev

SQL Server中的自动递增主键(长唯一代码)

来自分类Dev

SQL Server 2列的“双向”唯一/主键

来自分类Dev

SQL Server 2列的“双向”唯一/主键

来自分类Dev

如何将现有索引和主键移到SQL SERVER中的辅助文件组

来自分类Dev

如何将现有索引和主键移到SQL SERVER中的辅助文件组

来自分类Dev

SQL Server中的唯一键是聚集索引还是非聚集索引?

来自分类Dev

SQL Server是否在非聚集非唯一索引中索引空值?

来自分类Dev

在SQL Server中声明变量之间的区别

来自分类Dev

SQL =和IN之间的区别

来自分类Dev

Postgres SQL中的NOT IN和NOT EXISTS之间的区别

来自分类Dev

SQL中的DECLARE和SET之间的区别

来自分类Dev

SQL oracle中NVL和OR之间的区别

来自分类Dev

Postgres SQL中的NOT IN和NOT EXISTS之间的区别

来自分类Dev

LIKE '[AD]%' 和有什么区别?和 'A' 和 'D' 之间;在 SQL Server 中

Related 相关文章

  1. 1

    主键(x,y)和主键(x),唯一(y)之间的SQL区别

  2. 2

    SQL:添加唯一索引和添加唯一索引之间的区别?

  3. 3

    在SQL Server中创建具有唯一索引但没有主键的表有什么影响?

  4. 4

    sql server中“ =“和“ is”之间的区别

  5. 5

    sql server中“ =“和“ is”之间的区别

  6. 6

    MongoDb索引和SQL索引之间的区别

  7. 7

    sql server:唯一约束生成唯一键和唯一索引

  8. 8

    sql server:唯一约束生成唯一键和唯一索引

  9. 9

    sql server:唯一约束生成唯一键和唯一索引

  10. 10

    SQL:将主键添加到非唯一索引

  11. 11

    “ OR”和“ ||”之间的区别 在SQL中?

  12. 12

    在SQL Server中解析和转换之间的区别

  13. 13

    SQL Server中的分区和页面之间的区别?

  14. 14

    在SQL Server中“不为空”和“ <>空”之间的区别?

  15. 15

    跨表的SQL Server唯一索引

  16. 16

    SQL Server中的自动递增主键(长唯一代码)

  17. 17

    SQL Server 2列的“双向”唯一/主键

  18. 18

    SQL Server 2列的“双向”唯一/主键

  19. 19

    如何将现有索引和主键移到SQL SERVER中的辅助文件组

  20. 20

    如何将现有索引和主键移到SQL SERVER中的辅助文件组

  21. 21

    SQL Server中的唯一键是聚集索引还是非聚集索引?

  22. 22

    SQL Server是否在非聚集非唯一索引中索引空值?

  23. 23

    在SQL Server中声明变量之间的区别

  24. 24

    SQL =和IN之间的区别

  25. 25

    Postgres SQL中的NOT IN和NOT EXISTS之间的区别

  26. 26

    SQL中的DECLARE和SET之间的区别

  27. 27

    SQL oracle中NVL和OR之间的区别

  28. 28

    Postgres SQL中的NOT IN和NOT EXISTS之间的区别

  29. 29

    LIKE '[AD]%' 和有什么区别?和 'A' 和 'D' 之间;在 SQL Server 中

热门标签

归档