您的位置:首页 > 数据库

数据库设计问题整理

2015-10-21 11:13 204 查看
l  数据库的主键、外键

关系型数据库中的一条记录中有若干个属性,若其中某一个属性组能唯一标识一条记录,该属性组就可以成为一个主键。

比如:

         Student(stuID,name, sex,class)

         每个学生的学号(stuID)是唯一的,作为表的主键

         课程表(课程号,课程名,学分)

         课程号是唯一的,课程号就是一个主键

         成绩表(学号,课程号,课程名,成绩)

         成绩表中单一一个属性无法唯一标识一条记录,学号和课程号组合才能唯一标识一条记录,属性组学号+课程号作为一个主键。

 

成绩表中学号不是成绩表的主键,但与学生表中学号相对应,在学生表中学号是主键,则称成绩表中的学号是学生表的外键。

 

定义主键和外键能确定一条记录的唯一标识;

外键用于与另一张表关联,是能确定另一张表记录的字段,为了保持数据的一致性。

 

l  设计规则

主键用途:一行的唯一标识、作为一个可以被外键有效引用的对象

主键设计原则:

1、  应当对于用户没有意义

2、  应该是单列的,以便提高连接和筛选操作的效率

 

l  数据库设计三大范式

范式是关系型数据库中符合某一种设计要求的总结。

1、第一范式

要求数据库表中所有字段值都是不可再分(根据设计系统的实际需求)的原子值。

2、第二范式
在第一范式的基础上,要求数据表里的所有数据都要和该数据表的主键有完全依赖关系。每个非键属性完全依赖于主键。

减少冗余将不同类别分开,例如商品信息和订单信息。

3、第三范式(3NF)

确保每列都和主键列直接相关,而不是间接相关

 

Null与空

区分:

1、  NULL表示未知,占用空间,不走索引,DBA建议最好设置字段NOT NULL避免低效率的事情发生。

2、  空(’’)是不占用空间的

官方对于null的解释:

“NULL columns require additional space in therow to record whether their values are NULL. For MyISAM tables, each NULLcolumn takes one bit extra, rounded up to the nearest byte.” 

“空列需要额外的空间记录该行其值是否为NULL。对于MyISAM表,每个NULL列需要一个额外的位,四舍五入到最接近的字节。

 

在使用上的注意事项:

1:在进行count()统计某列的记录数的时候,如果采用的NULL值,会别系统自动忽略掉,但是空值是会进行统计到其中的。

2: 判断NULL 用IS NULL 或者 is not null,SQL 语句函数中可以使用ifnull()函数来进行处理,判断空字符用=''或者 <>''来进行处理

3: 对于MySQL特殊的注意事项,对于timestamp数据类型,如果往这个数据类型插入的列插入NULL值,则出现的值是当前系统时间。插入空值,则会出现 '0000-00-00 00:00:00'

4:对于空值的判断到底是使用is null 还是 =''要根据实际业务来进行区分。

 

l  主键与索引

主键:惟一地标识一行;作为一个可以被外键有效引用的对象。常常与外键构成参照完整性约束,防止出现数据不一致。

索引:一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

 

1.      主键一定是唯一性索引,唯一性索引并不一定就是主键。

所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。数据库在设计时,主键起到了很重要的作用。

主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。

2.      一个表中可以有多个唯一性索引,但只能有一个主键。

3.      主键列不允许空值,而唯一性索引列允许空值。

4.      索引可以提高查询的速度。

其实主键和索引都是键,不过主键是逻辑键,索引是物理键,意思就是主键不实际存在,而索引实际存在在数据库中,主键一般都要建,主要是用来避免一张表中有相同的记录,索引一般可以不建,但如果需要对该表进行查询操作,则最好建,这样可以加快检索的速度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库