2019独角兽企业重金招聘Python工程师标准>>>
投诉模块主要以投诉标识 prosecute _id和投诉号 prosecute_no为主,
constraint PK_ PROSE _ CASERPT primary key (PROSECUT_ID)或者
ALTER TABLE PROSE_CASERPT CONSTRAINT PK_ PROSE _ CASERPT PRIMARY KEY ( PROSECUT_ID );
create unique index UNQ_ PROSE _ CASE_CC on PROSE_CASERPT (
PROSECUT _NO ASC
);
数据表主键相当于书的页码。
索引相当于书的目录,有了目录我们可以很快的知道这本书的基本内容和结构,数据索引也一样,可以通过它很快查询到想要的结果,而不需要进行全表扫描。 。
主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。
主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
唯一性索引列允许空值,而主键列不允许为空值。
主键列在创建时,已经默认为空值 + 唯一索引了。
主键可以被其他表引用为外键,而唯一索引不能。
一个表最多只能创建一个主键,但可以创建多个唯一索引。
主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。该模块的 投诉标识 prosecute _id 就属于这种。因此,所选的主键必须遵守创建唯一索引的规则。
一般和业务无关的字段(比如mysql的自增字段)作为主键,而将业务相关的字段作为unique key
比如:身份证号可以确定一个人的身份,但是不能用来把他作为主键。
假设有一张人员表,还有100张表关联到这张表。假如用身份证做主键,前几年升级身份证,15位变18位,那么你有101个字段需要重新设置,没修改一个人员的身份证,就要附带更新100张表。
而所谓的无关,就是用自增字段或者UUID,或者类似Oracle rowid这样不包含任何业务信息,只代表这条记录在这张表里面位置的信息作为主键。无论业务如何变化,这个字段都不需要做修改(顶多因为业务量变大,修改字段长度,但不需要修改数据本身)。
其实倒不反对业务主键,但只指单一字段做主键,比如很多登陆系统,常就用loginName做用户表主键,而且这么做很方便,我觉得只要是值唯一而且不改动的 字段就可以做主键,但是不太可能,;
创建表时指定的 PRIMARY KEY 约束列隐式转换为 NOT NULL。
主键是逻辑键,索引是物理键,意思就是主键不实际存在,而索引实际存在在数据库中,主键一般都要建,主要是用来避免一张表中有相同的记录,索引一般可以不建,但如果需要对该表进行查询操作,则最好建,这样可以加快检索的速度。
可以为唯一索引增加一个非空约束
ALTER TABLE PROSE_CASERPT UNQ_ PROSE _ CASE_CC NOT NULL;
如果建表的时候 prosecute_no 为 NOT NULL 就不需要建非空约束了。
————————————————————————————————————————————————————————————————————————————————
同理
唯一性索引unique index和一般索引normal index最大的差异就是在索引列上增加了一层唯一约束。添加唯一性索引的数据列可以为空,但是只要存在数据值,就必须是唯一的。
联系:(1)Unique Index就是额外添加的唯一性约束。该约束严格的保证索引列的取值唯一性,这在一些数据列上的业务约束实现是很重要的功能。比如一个数据列,不能作为主键,而且允许为空,但是业务上要求唯一特性。这时候使用唯一性索引就是最好的选择。
(2)两者在性能上并无很大区别。