生活中每个人都有自己的特征,用于区别其他人,比如姓名,身份z号,因为姓名可能有重复,区分每个人的时候都使用身份z号,比如办yhk需要对应本人的身份z号,这样可以把yhk跟人关联起来。
数据库中的数据(表示某个事物或对象)也是同样,为了区分数据,类似人的身份z号,为数据定义一个键,跟身份z号一样,这个键作用多多:比如可以确定这个数据跟其他数据是不一样的,另外通过键可以跟其他类型数据关联起来,用于其他复杂用途比如复杂查询等
数据库主键
主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。
作用:
1)保证实体的完整性;
2)加快数据库的 *** 作速度
3) 在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。
4) ACCESS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。
在有些数据库中,虽然主键不是必需的,但最好为每个表都设置一个主键,不管是单主键还是复合主键。它存在代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,以及本记录的修改与删除。
主键的无意义性
在开发过程中,读者可能会看到将一些表使用有意义的字段表示主键,例如“用户登录信息表”将“登录名”(英文名)作为主键,“订单表”中将“订单编号”作为主键,如此设计主键一般都是没什么问题,因为将这些主键基本不具有“意义更改”的可能性。但是,也有一些例外的情况,例如“订单表”需要支持需求“订单可以作废,并重新生成订单,而且订单号要保持原订单号一致”,那将“订单编号”作为主键就满足不了要求了。因此读者在使用具有实际意义的字段作为主键时,需要考虑是否存在这种可能性。
主键的选择
①编号作主键
此方法就是采用实际业务中的唯一字段的“编号”作为主键设计,这在小型的项目中是推荐这样做的,因为这可以使项目比较简单化,但在使用中却可能带来一些麻烦,比如要进行“编号修改”时,可能要涉及到很多相关联的其他表,就像黎叔说的“后果很严重”;还有就是上面提到的“业务要求允许编号重复时”,我们再那么先知,都无法知道业务将会修改成什么
②自动编号主键
这种方法也是很多朋友在使用的,就是新建一个ID字段,自动增长,非常方便也满足主键的原则,优点是:数据库自动编号,速度快,而且是增量增长,聚集型主键按顺序存放,对于检索非常有利;数字型的,占用空间小,易排序,在程序中传递也方便;如果通过非系统增加记录(比如手动录入,或是用其他工具直接在表里插入新记录,或老系统数据导入)时,非常方便,不用担心主键重复问题。
缺点:其实缺点也就是来自其优点,就是因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其他系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突(前提是老系统也是数字型的);如果其他系统主键不是数字型那就麻烦更大了,会导致修改主键数据类型了,这也会导致其他相关表的修改,后果同样很严重;就算其他系统也是数字型的,在导入时,为了区分新老数据,可能想在老数据主键前统一加一个“o”(old)来表示这是老数据,那么自动增长的数字型又面临一个挑战。
主键是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录且不能为空;
索引是对数据库表中一列或多列的值进行排序的一种结构,只有当经常查询索引列中的数据时,才需要在表上创建索引,使用索引可快速访问数据库表中的特定信息。
索引占用磁盘空间,并且降低添加、删除和更新行的速度。当然索引也有好处就是查询速度快,它利还是大于弊的所以请慎重使用索引。
比如:一个学生表(t_stu
)有1000条数据,给它id列建个主键和索引,
你想查询id=1000;的这条信息,如果没有索引,它就一条一条的比对查找,系统运行1000次才找到,要是创建了索引,你查询id=1000的这条信息,系统只运行一次就找到了。
数据库主键指的是本身表的id,比如可以创建一个自增id当做数据库主键。
业务主键是指对于本身表的业务逻辑关系组成的主键,比如你这张表示股票日行情表,业务主键就是股票+日期。
但是数据库不允许有两个主键,建议自增id设置为唯一键
首先 文档数据库 和 键值数据库 都是 NoSQL\x0d\\x0d\第二 文档数据库 最典型的是 MongoDB 而 键值数据库 最典型的是 Redis\x0d\\x0d\第三 文档数据库 提供嵌入式文档 这对于非规范化非常有用 文档数据库将经常查询的数据存储在同一个文档中 而不是存储在表中 如果一个应用程序需要存储不同的属性 以及大量的数据 那么文档数据库将会是一个很好的选择\x0d\\x0d\第四 键值数据库 适用于那些频繁读写 拥有简单数据模型的应用 键值数据库中存储的值 可以是简单的标量值 如整数或布尔值 也可以是结构化数据类型 比如列表和 JSON 结构 键值数据库通常具有简单的查询功能 允许通过键来查找一个值
楼主写的都不是标准的吧,键码:就是具有唯一性的属性,或者几个最小单位的组合能够体现唯一性,而候选键和主键都具有唯一性,本来两个没有区别,但是多个可以表示唯一性的属性时,你必然会选择其中一个表示这个表的唯一性,那这个就是主键码,剩下的唯一性的属性自然都是候选码,对于公共键,汗,表示没听过,书上貌似也没有,不知是不是你写错了,还是怎么的,而外键码:举个例子,有两个表,在其中一个表中的主键,却是另外一个表的候选码,OK,对于那个候选码的表,这个属性就是外键码了。
不知说的请不清,但还希望采纳!不懂的地方也可以继续问我,知道的,就给你解答
以上就是关于数据库中键的定义和作用全部的内容,包括:数据库中键的定义和作用、数据库表中的主键有什么作用设和不设有什么区别、新手问一个问题,数据库表中主键和索引有啥区别和联系等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)