对象和表之间的关系

来源:互联网 发布:广州数据恢复 编辑:程序博客网 时间:2024/05/21 08:49

个人觉得在软件的设计时,先对需求进行把控,然后根据需求画出UML类,最后才是数据库的设计。根据对象设计表结构。(这种想法不一定对)

接下来说说关系型数据库实体之间的三种关系:

一、一对一关系

比如:中国的夫妻制、人和身份证之间。针对这种关系,我们应该如何进行数据库表的设计呢?

首先我们需要明确这一对关系的主从关系。不确定主从关系的话,应该根据具体的需求而定。拿人和身份证之间的关系距离。人不一定有身份证(超生的黑人),但是身份证一定对应某个人,除非这个证是假的。那么,从属关系就很明确了。“人”是主,“身份证”是属。针对这种关系,我们将外键定义在身份证对应的实体中,参照到“人”的主键。


"人"表

create table person

(

id int primary key auto_increment,

name varchar(20),

.....

)

"身份证"表

create table idcard

(

id int primary key auto_increment,

name varchar(20),

personid  int not null,

constraint  personid _fk  foreign key(personid ) references person(id)

)



二、多对一关系

如果关系是多对一的话,为了避免数据的冗余。应该将外键定义在“多”的一方。比如班级表和学生表之间的关系。一个班级对应多个学生,一个学生只能在一个班级中,

所以,外键定义在学生表中,参照到班级表中的主键。

班级表:

create table class

(

id int primary key auto_increment,

name varchar(20)

)


学生表:

create table student

(

id primary key,

name varchar(20),

classid id  not null,

constraint  classid _fk  foreign key(classid ) references person(id)

)


三、多对多关系

如果是多对多的关系,相对比较复杂一下。外键定义在哪儿都会导致数据的冗余。所以将两者之间的关系定义在中间表中。这个中间表的联合主键就是

另外两个表的外键。

老师表:

create table teacher

(

tid int primary key,

.....

)

学生表:

create table student

(

sid int primary key,

....

)


中间表:

create table tea_stu

(

tid int not null,

sid int not null,

primary key (tid,sid), -- 联合主键

constraint  tid_fk  foreign key(tid ) references teacher(tid),

constraint  sid_fk  foreign key(sid ) references student(sid)

)


以上就是根据实体关系,进行表结构设计的方法。




0 0
原创粉丝点击