主键(PrimaryKey):主键就是每一个数据行(记录)的惟一标识,不会有重复值的列(字段)才能当作主键。一个表能够没有主键,可是这样会很难处理表,所以通常状况表都要设置主键。算法
主键有两张选用策略,分为业务主键和逻辑主键。并发
业务主键是使用有业务意义的字段作主键,例如身份证号、银行帐号等。ide
逻辑主键是使用没有任何业务意义的字段作主键,彻底用来给程序看,是业务人员不会看的数据,推荐使用逻辑主键。函数
逻辑主键设置方法为将设计页面中列属性栏的表示规范切换为是便可,在输入记录时,逻辑主键字段能够不输入,系统自动匹配。当你删除了最后一条记录,它的主键为4,若新增一条记录,他会直接变为5而不是4。由于删除了的那条记录仍存在在系统表中,属于软删除。ui
外键(ForeignKey):外键表的某一列的值必须与主键表的主键的值一致,外键表就至关于引用了主键表的主键值。用于记录表和表的关联。一个主键能够具备多个外键。编码
主键选择和Guid(全球惟一标识符):SQLServer中两种经常使用的主键数据类型:int+标识符;或者是uniqueidentifier(Guid)。spa
用标识列实现字段自增能够避免并发的问题,在insert的时候不用指定主键的值,将字段的“是标识列”设置为“是”,一个表只能有一个标识列。设计
Guid算法是能够产生惟一标识的高效算法,他使用网卡MAC、地址、纳秒级时间、芯片ID码等算出来,保证每次生成的GUID永远不会重复,不管是同一个计算机上仍是不一样计算机,在公元3400年之前产生的GUID均不相同。SQLServer中生成GUID的函数的语句为newid(),而.NET中生成GUID的方法是:Guid.NewGuid(),返回值是Guid类型。指针
用int自增字段的优势是:占用空间小,无需开发人员干预,易读。缺点是:效率低,数据导入导出的时候很慢。code
Guid的优势:效率高、数据导入导出方便。缺点是:占用空间大、不易读。
目前业界主流更倾向于使用Guid。
数据类型:
(var)char为ASCII编码,一个字符占一个字节,而当输入中文时,一个汉字占两个字节,比较适合于英文字符。而n(var)char采用的是Unicode编码,输入一个字符不管是英文仍是中文都占两个字节,当输入中文时最好采用该字符串类型,由于能够匹配长度。text用于存储长文本信息,是一个指针(2G)。
2018.08.10