美文网首页
14. 概念模型

14. 概念模型

作者: Liuzhl | 来源:发表于2018-12-21 10:04 被阅读47次

概念模型

  • 概念模型是对真实世界中问题域内的事物的描述,不是对软件设计的描述
  • 当我们要完成一个系统时,需要把系统中的实体抽取出来,形成概念模型
  • 例如部门、员工都是系统中的实体,概念模型中的实体最终会成为Java中的类(对象模型),数据库中的表(关系模型)
  • 实体之间的关系分为:
    • 1对1:例如老公和老婆,一个老公只能有一个老婆,一个老婆也只能有一个老公
    • 1对多:例如部门和员工,一个部门可以有多个员工,一个员工只能从属于一个部门
    • 多对多:老师与学生,一个老师可以有多个学生,一个学生也可以有多个老师

对象模型,类的关系

is a 关系,体现为继承
has a 关系, 体现为成员变量,双向关联
  • 注意引用的是一个对象,而不是一个主键
  • has a也就是关联关系,分为
    • 1对1
    public class Husband{
        private Wife wife;
    }
    public class Wife{
        private Husband husband;
    }
    
    • 1对多
    public class Dept{
        private List<Emp> emps;
    }
    public class Emp{
        private Dept dept;
    }
    
    • 多对多
    public class Teacher{
        private List<Student> students;
    }
    
    public class Student{
        private List<Teacher> teachers;
    }
    
use a 关系,体现为方法的参数
public class Person() {
    public void write(Pen pen){
    }
}

关系模型,数据库中的表的关系

  • 在数据库中,表之间的关系用外键来维护
  • 应该由数量多的来维护数量少的一方,也就是说数量少的一方为主表,数量多的一方为从表,外键应该由从表指向主表。
  • 外键必须引用某张表的主键
  • 外键可以重复
  • 外键可以为空
  • 一张表可以有多个外键
  • 外键的命名为 fk_从表名_主表名
  • 外键删除时或更新时有4个选项
    • RESTRICT(默认的) / NO ACTION 表示在删除主表数据时必须满足条件:从表没有外键指向该数据了
    • CASCADE 表示在删除主表数据时 同时删除从表中所有外键指向该数据的数据
    • SET NULL 表示在删除主表数据时 将从表的外键设置为NULL
  • 在Java中外键体现为在多方加入一个成员变量,类型为主表的主键类型。

一对一建表

  • 一对一将哪张表作为主表都行,这里暂时以husband表作为主表
CREATE TABLE `husband` (
  `h_id` int(11) NOT NULL AUTO_INCREMENT,
  `h_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`h_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 让wife表(从表)的主键作为外键指向husband的主键
CREATE TABLE `wife` (
  `w_id` int(11) NOT NULL,
  `w_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`w_id`),
  CONSTRAINT `aaa` FOREIGN KEY (`w_id`) REFERENCES `husband` (`h_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

多对多建表

  • 多对多建表,2张表全是主表,然后建第3张表来作为中间表,中间表中应该有2个外键分别指向2张表
  • 学生表
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `s_id` int(11) NOT NULL AUTO_INCREMENT,
  `s_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`s_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 教师表
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
  `t_id` int(11) NOT NULL AUTO_INCREMENT,
  `t_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`t_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 中间表
DROP TABLE IF EXISTS `teacher_student`;
CREATE TABLE `teacher_student` (
  `tea_stu_id` int(11) NOT NULL AUTO_INCREMENT,
  `fk_stu` int(11) DEFAULT NULL,
  `fk_tea` int(11) DEFAULT NULL,
  PRIMARY KEY (`tea_stu_id`),
  KEY `ccc` (`fk_stu`),
  KEY `ddd` (`fk_tea`),
  CONSTRAINT `ccc` FOREIGN KEY (`fk_stu`) REFERENCES `student` (`s_id`),
  CONSTRAINT `ddd` FOREIGN KEY (`fk_tea`) REFERENCES `teacher` (`t_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

相关文章

网友评论

      本文标题:14. 概念模型

      本文链接:https://www.haomeiwen.com/subject/tcvkkqtx.html