mysql数据库对象关系映射

xiaoxiao2021-02-28  8

角度不同,实际上可以看成同一种)员工与部门之间的关系

 

有以下两个java对象:

 

对象类:

 

? 1 2 3 4 5 6 7 8 9 10 [java] Department  int id;  String name ;  Set employees=new HashSet();      Employee  int id;  String name ;  Department dept;

 

员工与部门,这两者是典的多对一的关系,多个员工可以属于同一个部门,一个部门中可以有多个员工。

注意:在实际开发时,如果要设计一个员工管理系统,那么在进行对象实体类的设计时,就是按照上面

 

设计方式来设计员工类和部门类。在员工 类中有一个Department dept属性,而没有直接用int dept_no,

 

因为样更加符面象对象的设计思想。

 

对应的数据库的表为:

 

? 1 2 3 4 5 6 7 8 9 10 11 12 [sql] create department(  id int primary key ,  name varchar (20)  );  [sql] create employee(  id int primary key ,  name varchar (20),  dept_id int ,  constraint dept_id_FK foreign key (dept_id) references department(id)  );

 

注:两个表之间的关系,多对一,用外键来体现。一般外键的应该放在多的一方,在这里也就是放在employee员工表中。

 

b.多对多的关系 学生与老师之间的关系

 

java类对象:

 

? 1 2 3 4 5 6 7 8 9 10 [java] Teacher  int id;  String name ;  Set students=new HashSet();      Student  int id;  String name ;  Set teachers=new HashSet();

 

 

对应的数据库中的表:

 

? 1 2 3 4 5 6 7 8 9 [sql] create table teacher(  id int primary key ,  name varchar (20)  );  create table student(  id int primary key ,  name varchar (20)  );

 

注:对于多对多的关系,应该创建第三张表来保存两张表的映射关系

 

? 1 2 3 4 5 6 7 8 [sql] create table student_teacher(  student_id int ,  teacher_id int ,  constraint student_teacher_PK primary key (student_id,teacher_id),  constraint student_id_FK foreign key (student_id) references student(id),  constraint teacher_id_FK foreign key (teacher_id) references teacher(id)  );

 

第三张中的主键是以前两张表的主键作为复合主键,并分别以两张表的主键作为外键。

 

 

 

c.一对一的关系 人与身份证之间的关系

 

java类对象:

 

? 1 2 3 4 5 6 7 8 9 [java] Person  int id;  String name ;  IdCard ic;      IdCard  int id;  String address;

 

 

对应的数据库表为:

 

? 1 2 3 4 5 6 7 8 9 10 11 [sql] create table person(  id int primary key ,  name varchar (20)  );      create table idcard(  id int primary key ,  address varchar (40),  constraint id_FK foreign key (id) references person(id)  );

 

 

注:对于一对一关系的两张表,分主表与从表,从表的存在必须依赖于主

表,主表可以不依赖于从表。从表的设计上其主键字段同时也是外键字段。

 

备注:有时在设计表时,会特意把两张表合在一张表中,虽然会造成

 

数据冗余,但是却可以不因为联表查询而造成查询性能有所降低。这是用

 

空间来换时间的做法。

转载请注明原文地址: https://www.6miu.com/read-1400258.html

最新回复(0)