逻辑结构设计:实体型转换为关系模式

实体间的联系有:一对一、一对多和多对多。

1.一对一联系

注:每表中必须设置主键,为实现一对一的联系,需将参照属性定义为唯一性约束。

1.1第一种方法:将联系转换为一个独立的关系模型(即表)。

其属性构成是由相连各实体的码和联系本身的属性构成。

1.2第二种方法:将联系与实体的任意一端合并。

其属性构成是另一关系的码和联系本身的属性。

2.一对多的联系

第一种方法:转化为一个独立的关系模式,由相连实体的码和联系本身的属性构成。

第二种方法:与多端关系模式合并,加入另一关系模式的码和联系本身的属性。

3.多对多

1.转化为一个独立关系模式,属性构成是 相连各实体的码和本身的属性构成。

注:多对多总是转化为两个一对多

以一对一为例

例:部门表(部门编号,部门名称),部门经理表(经理编号,姓名),部门与部门经理之间存在一对一关系,联系为:任职。如下图:

用第一种方法实现:将联系转换为一个独立的关系模型(即表)即创建三个表,两个实体表和一个关系表
create database 练习
on
(
	--逻辑文件名
	name=练习,
	--物理文件名
	filename='e:\数据库\练习\练习.mdf',--mdf数据库文件
	--文件的大小
	size=10MB,
	--文件的增长方式
	filegrowth=10%,
	--文件最大值
	maxsize=100MB
) 
log on
(
	--逻辑文件名
	name=mydb_log,
	--物理文件名
	filename='e:\数据库\练习_log.ldf',--ldf 数据库日志文件
	--文件的大小
	size=10MB,
	--文件的增长方式
	filegrowth=10%,
	--文件最大值
	maxsize=100MB
)
GO
use 练习
create table 部门
(
	部门编号 char(20) ,
	部门名称 char(20)
)
alter table 部门
alter column 部门编号 char(20) not null
alter table 部门
add constraint pk_部门编号 primary key (部门编号)
create table 部门经理
(
	经理编号 char(20) ,
	经理姓名 char(20)
)
alter table 部门经理
alter column 经理编号 char(20) not null
alter table 部门经理
add constraint pk_经理编号 primary key(经理编号)
create table 任职
(
	部门编号 char(20) ,
	经理编号 char(20) ,
	任职时间 datetime 
)
alter table 任职
alter column 部门编号 char(20) not null
alter table 任职
alter column 经理编号 char(20) not null
alter table 任职
add constraint pk_部门编号_经理编号 primary key(部门编号,经理编号)
alter table 任职
add constraint UQ_部门编号 unique (部门编号)
alter table 任职
add constraint UQ_经理编号 unique (经理编号)
alter table 任职
add foreign key(部门编号) references 部门(部门编号) 
alter table 任职
add foreign key(经理编号) references 部门经理(经理编号) 
用第二种方法实现:将联系与实体的任意一端合并。即建两个表,其中一个的属性构成是另一关系的码和联系本身的属性。
create table 部门
(
	部门编号 char(20) ,
	部门名称 char(20)
)
alter table 部门
alter column 部门编号 char(20) not null
GO
alter table 部门
add constraint pk_部门编号 primary key (部门编号)
create table 部门经理
(
	经理编号 char(20) ,
	经理姓名 char(20),
	部门编号 char(20),
	任职时间 datetime
)
alter table 部门经理
alter column 经理编号 char(20) not null
alter table 部门经理
alter column 部门编号 char(20) not null
GO
alter table 部门经理
add constraint pk_经理编号 primary key(经理编号,部门编号)
alter table 部门经理   add foreign key(部门编号) references 部门(部门编号) 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值