29

数据库范式、E-R图

 5 years ago
source link: https://blog.csdn.net/Spectre_win/article/details/88571922?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

文章目录

规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。

2. 三大范式

第一范式(1NF):是指数据库表的每一列都是不可分割的基本数据项。列不可再分。

问题:多种方式进行系统登录判断。

create table users
	(
		user_id int not null,
		user_name varchar2(50) unique,
		user_phone varchar(20) unique,
		user_email varchar(100) unique,
		password varchar2(32) not null,
		status int default 1,
		primary key(user_id)
	);

	insert into users(user_id,user_name,user_phone,user_email,password,status)
		values (1,null,'15033336666',null,'670B14728AD9902AECBA32E22FA4F6BD',default);
	insert into users(user_id,user_name,user_phone,user_email,password,status)
		values (2,null,null,'[email protected]','670B14728AD9902AECBA32E22FA4F6BD',default);
	insert into users(user_id,user_name,user_phone,user_email,password,status)
		values (3,'admin_admin',null,'[email protected]','670B14728AD9902AECBA32E22FA4F6BD',default);

	select * from users 
		where (user_name = ? or user_phone = ? or user_email = ?) 
			and password = ?
			
	select * from users 
		where (user_name一  = null or user_phone = '15033336666' or user_email = null) 
			and password = '000000'
	select * from users 
		where (user_name = null or user_phone = null or user_email = '[email protected]') 
			and password = '000000'
	select * from users 
		where (user_name = 'admin_admin' or user_phone = null or user_email = '[email protected]') 
			and password = '670B14728AD9902AECBA32E22FA4F6BD'

第二范式(2NF):明确主键。

它的规则是要求数据表里的所有数据都要和该数据表的主键有完全依赖关系;如果有哪些数据只和主键的一部份有关的话,它就不符合第二范式。

每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。

QBbAvuZ.png!web

一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把他拆开来。

reqyaiY.png!webzam2Eb6.png!web

第三范式:明确外键。

就是指表中的所有数据元素不但要能惟一地被主关键字所标识,而且它们之间还必须相互独立,不存在其他的依赖传递关系。

也就是说,对于一个满足2nd NF 的数据结构来说,表中有可能存在某些数据元素依赖于其他非关键字数据元素的现象,必须消除。即每个属性都跟主键有直接关系而不是间接关系。像:a–>b–>c 属性之间含有这样的关系,是不符合第三范式的。

比如Student表

(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)

这样一个表结构,就存在上述关系。

学号--> 所在院校 --> (院校地址,院校电话)

这样的表结构,我们应该拆开来,如下。

(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)

最后:

三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

3. E-R 图

E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

它是描述现实世界关系概念模型的有效方法。是表示概念关系模型的一种方式。

用“矩形框”表示实体型,矩形框内写明实体名称;

用“椭圆图框”表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来;

用”菱形框“表示实体型之间的联系成因,在菱形框内写明联系名,并用”实心线段“分别与有关实体型连接起来,同时在”实心线段“旁标上联系的类型(1:1,1:n或m:n)。

MRRBZna.png!webfYv2eiB.png!web 关系模型:用二维表的形式表示实体和实体间联系的数据模型

aAbmAnY.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK