数据库里面的键(SQL Server)
引言:
- 前几天学习项目的时候发现了关于SQL里的一点基础见解。
- 关于SQL里的主键,外键。
主键:
- 主键有2种主键的存在。一种是业务主键,一种是逻辑主键。
- 业务主键通常是表里有的数据作为主键使用。一般常见的就是不容易重复的数据,例如:身份证号等
- 逻辑主键就是本来一条数据没有这个字段,但是我们担心会出现重复数据,我们自己生成一个让此条数据成为唯一的重要字段,在一张表里很明显的主键建立方式是一个 int字段标明他 并且让他自增长(一般称为标识列)
- 一般主键的作用用术语说就是“实体完整性”
- 实体:表中的记录,一个实体就是指表中的一条记录。
- 实体完整性:在表中不能存在完全相同的记录,且每条记录都要具有一个非空且不重复的主键值。
- 使用逻辑主键另外一个优势就是他的物理性能比较好。在sql的物理存储中他是一并往下添加,和数据的排列是一致的,这样做任何操作都会比较方便、快捷。
- GUID,GUID算法是一种可以产生唯一表示的高效算法,它使用网卡MAC、地址、纳秒级时间、芯片ID码等算出来的,这样保证每次生成的GUID永远不会重复,无论是同一计算机还是不同计算机。在公元3400年前产生的GUID与任何其他产生过的GUID都不相同。通常我们使用逻辑主键比较合理。
- GUID如果当主键我们通常要注意,他不会像int字段那样自增长,他是随机的,所以使用GUID也会造成数据存储的物理性变差,使一张表会出现很多变动,当然事无绝对,也有方法能让GUID的排序和数据的排序一致。
- Sql中的方法:newid();
外键:
- 外键我们通常不能单独解释,我的理解是当有2个互相关联的表要组合在一起便于做各种操作的时候,外键就起到了很大的作用,也就是用术语说是“参照完整性”
- 当更新、删除、插入一个表中的数据时,通过参照引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确。参照的完整性要求关系中不允许引用不存在的实体。参照完整性与实体完整性是关系模型必须满足的完整性约束条件。
- 简单的说就是表间主键外键的关系。
- 参照完整性则是相关联的两个表之间的约束,具体的说,就是从表中每条记录外键的值必须是主表中存在的,因此,如果在两个表之间建立了关联关系,则对一个关系进行的操作要影响到另一个表中的记录。
现在有两张表,Users表有一个字段是“userId”和一个字段“carId”,"username",Cars表有一个字段“carId”和“carName” ,他们之间添加了外键关联。所以如果我们想知道其中一个user的car name我们就可以使用这样的sql来查询
select u.username,c.carName from u as Users inner join c as Cars on u.carId=c.carId where u.userId=@UserId
请注意这里的 u.carId=c.carId 这样就将两张表联系上了。我们也查询到了我们想要的2张表的结果。
定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
二、主键、外键的区别
- 定义:
- 主键--唯一标识一条记录,不能有重复的,不允许为空
- 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值
- 作用:
- 主键--用来保证数据完整性
- 外键--用来和其他表建立联系用的
- 个数:
- 主键--主键只能有一个
- 外键--一个表可以有多个外键
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。