主键设计原则
1、确保主键的无意义性
要用代理主键,不要使用业务主键。任何一张表,强烈建议不要使用有业务含义的字段充当主键。我们通常都是在表中单独添加一个整型的编号充当主键字段。
2、采用整型主键
主键通常都是整数,不建议使用字符串当主键。(如果主键是用于集群式服务,可以采用字符串类型)
3、减少主键的变动
主键的值通常都不允许修改,除非本记录被删除
4、避免重复使用主键
主键的值通常不重用,意味着记录被删除后,该主键值不再使用。
5、主键字段定义区分
主键不要直接定义成id,而要加上前缀,定义成表名id或者表名_id
数据库主键
主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。
作用:
1)保证实体的完整性;
2)加快数据库的 *** 作速度
3) 在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。
4) ACCESS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。
在有些数据库中,虽然主键不是必需的,但最好为每个表都设置一个主键,不管是单主键还是复合主键。它存在代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,以及本记录的修改与删除。
主键的无意义性
在开发过程中,读者可能会看到将一些表使用有意义的字段表示主键,例如“用户登录信息表”将“登录名”(英文名)作为主键,“订单表”中将“订单编号”作为主键,如此设计主键一般都是没什么问题,因为将这些主键基本不具有“意义更改”的可能性。但是,也有一些例外的情况,例如“订单表”需要支持需求“订单可以作废,并重新生成订单,而且订单号要保持原订单号一致”,那将“订单编号”作为主键就满足不了要求了。因此读者在使用具有实际意义的字段作为主键时,需要考虑是否存在这种可能性。
主键的选择
①编号作主键
此方法就是采用实际业务中的唯一字段的“编号”作为主键设计,这在小型的项目中是推荐这样做的,因为这可以使项目比较简单化,但在使用中却可能带来一些麻烦,比如要进行“编号修改”时,可能要涉及到很多相关联的其他表,就像黎叔说的“后果很严重”;还有就是上面提到的“业务要求允许编号重复时”,我们再那么先知,都无法知道业务将会修改成什么
②自动编号主键
这种方法也是很多朋友在使用的,就是新建一个ID字段,自动增长,非常方便也满足主键的原则,优点是:数据库自动编号,速度快,而且是增量增长,聚集型主键按顺序存放,对于检索非常有利;数字型的,占用空间小,易排序,在程序中传递也方便;如果通过非系统增加记录(比如手动录入,或是用其他工具直接在表里插入新记录,或老系统数据导入)时,非常方便,不用担心主键重复问题。
缺点:其实缺点也就是来自其优点,就是因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其他系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突(前提是老系统也是数字型的);如果其他系统主键不是数字型那就麻烦更大了,会导致修改主键数据类型了,这也会导致其他相关表的修改,后果同样很严重;就算其他系统也是数字型的,在导入时,为了区分新老数据,可能想在老数据主键前统一加一个“o”(old)来表示这是老数据,那么自动增长的数字型又面临一个挑战。
用sql语句创建时,identity(1,1) 有这条或者类似的那个字段是主键。
或者在窗口中建表时,选择为主键的字段是主键喽
主键是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。主键主要是用于其他表的外键关联,以及本记录的修改与删除。
举例:设置主键
create table 学生表
(学号, char(12) primary key not null,
姓名, char(8) not null,
班级编号, char(10) foreign key references 班级表(班级编号)
)
第一列学号设为主键,第三列班级编号为外键,参考班级表中的班级编号列。
主键(Primary key): 也称为主码或主关键字,用于惟一地确定一个元组的属性或属性组(复合主码)。每个关系都有一个并且只有一个主码。
外键(Foreign Key):也称为外码或外部关键字。如果一个属性集不是所在关系的关键字,但是是其他关系的关键字,则该属性集称为外部关键字。在关系数据库中可以通过外键使两个关系关联,这种联系通常是一对多(1:n)的,其中主(父)关系(1方)称为被参照关系,从(子)关系(n方)称为参照关系。
一个表只能有一个字段做做主键,但如果这个表没有主键,你又想找出惟一的记录,那么你可以使用多个字段组合成为主键来惟一标识一条记录。
你的问题:
一个表中只能有一个主键 (对)
是不是只能有一个字段为主键 (错,主键可由多字段组成)
主键:唯一标识表中的所有行的一个列或一组列主键不允许空值不能存在具有相同的主键值的两个行因此主键值总是唯一标识单个行表中可以有不止一个键唯一标识行每个键都称作候选键只有一个候选键可以选作表的主键所有其它候选键称作备用键尽管表不要求具有主键但定义主键是很好的做法 在规范化的表中每行中的所有数据值都完全依赖于主键例如在以 EmployeeID 作为主键的规范化的 employee 表中所有列都应包含与某个特定职员相关的数据该表不具有 DepartmentName 列因为部门的名称依赖于部门 ID而不是职员 ID
以上就是关于数据库主键用什么类型全部的内容,包括:数据库主键用什么类型、数据库表中的主键有什么作用设和不设有什么区别、什么才是数据库中表的主键等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)