首页 > 代码库 > ssh 实体关系分析确立(ER图-实体关系图)

ssh 实体关系分析确立(ER图-实体关系图)

比较简单的方式就是根据模仿同类产品,根据同类产品的进行模仿,表单就是一个起码要加的字段,然后根据项目需要额外增加字段。

注意:实体类之间的引用关系还需要考虑性能的影响。如:单向或是双向。


表设计:




设计好后:

写实体类

建立实体类到数据库的关联关系

概述

5.实体关系分析
1.类结构:带箭头是单线关联,不带箭头是双向关联
----------------------------------------
class User (1)<------(*) class Survey  (1)-------(*)  class Page     (1)-------(*)    class Question              
{ {                      {                      {                       
Integer id ; Integer id ;         Integer id ;        Integer id ;        
... ...                ...                ...                 
   User user ;                 Survey survey ;             Page page ;                                    
   Set<Page> pages ;        Set<Question> questions ;                                             
} }                      }                      }                       

2.表结构
------------------------------------------------------------------
[users]
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| email    | varchar(50) | YES  |     | NULL    |                |
| password | varchar(50) | YES  |     | NULL    |                |
| nickname | varchar(50) | YES  |     | NULL    |                |
| regdate  | datetime    | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+


[surveys]
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment |
| title         | varchar(200) | YES  |     | NULL    |                |
| pretext       | varchar(50)  | YES  |     | NULL    |                |
| nexttext      | varchar(50)  | YES  |     | NULL    |                |
| exittext      | varchar(50)  | YES  |     | NULL    |                |
| donetext      | varchar(50)  | YES  |     | NULL    |                |
| createtime    | datetime     | YES  |     | NULL    |                |
| userid        | int(11)      | YES  | MUL | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+


[pages]
+-------------+---------------+------+-----+---------+----------------+
| Field       | Type          | Null | Key | Default | Extra          |
+-------------+---------------+------+-----+---------+----------------+
| id          | int(11)       | NO   | PRI | NULL    | auto_increment |
| title       | varchar(200)  | YES  |     | NULL    |                |
| description | varchar(200)  | YES  |     | NULL    |                |
| surveyid    | int(11)       | YES  | MUL | NULL    |                |
+-------------+---------------+------+-----+---------+----------------+


[questions]
+---------------------+--------------+------+-----+---------+----------------+
| Field               | Type         | Null | Key | Default | Extra          |
+---------------------+--------------+------+-----+---------+----------------+
| id                  | int(11)      | NO   | PRI | NULL    | auto_increment |
| questiontype        | int(11)      | YES  |     | NULL    |                |
| title               | varchar(200) | YES  |     | NULL    |                |
| options             | varchar(200) | YES  |     | NULL    |                |
| other               | bit(1)       | YES  |     | NULL    |                |
| otherstyle          | int(11)      | YES  |     | NULL    |                |
| otherselectoptions  | varchar(200) | YES  |     | NULL    |                |
| matrixrowtitles     | varchar(200) | YES  |     | NULL    |                |
| matrixcoltitles     | varchar(200) | YES  |     | NULL    |                |
| matrixselectoptions | varchar(200) | YES  |     | NULL    |                |
| pageid              | int(11)      | YES  | MUL | NULL    |                |
+---------------------+--------------+------+-----+---------+----------------+


3.映射文件
------------------------------------------
[User.hbm.xml]
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.atguigu.surveypark.model.User" table="users">
<id name="id" column="id" type="integer">
<generator class="identity" />
</id>
<property name="email" column="email" type="string" length="50" />
<property name="password" column="password" type="string" length="50" />
<property name="nickName" column="nickname" type="string" length="50" />
<property name="regDate" column="regdate" type="timestamp"  update="false"/>
</class>
</hibernate-mapping>


[Survey.hbm.xml]
<hibernate-mapping package="com.atguigu.surveypark.model">
<class name="Survey" table="surveys">
<id name="id" column="id" type="integer">
<generator class="identity" />
</id>
<property name="title" column="title" type="string" length="200" />
<property name="preText" column="pretext" type="string" length="50" />
<property name="nextText" column="nexttext" type="string" length="50" />
<property name="doneText" column="donetext" type="string" length="50" />
<property name="exitText" column="exittext" type="string" length="50" />
<property name="createTime" column="createtime" type="string" length="200" />

<!-- 映射从Survey到User之间多对一关联关系 -->
<many-to-one name="user" class="User" column="userid" />

<!-- 映射从Survey到Page之间一对多关联关系 -->
<set name="pages" inverse="true">
<key column="surveyid" />
<one-to-many class="Page"/>
</set>
</class>
</hibernate-mapping>


[Page.hbm.xml]
<hibernate-mapping package="com.atguigu.surveypark.model">
<class name="Page" table="pages">
<id name="id" column="id" type="integer">
<generator class="identity" />
</id>
<property name="title" column="title" type="string" length="100" />
<property name="description" column="description" type="string" length="200" />

<!-- 映射从Page到Survey之间多对一关联关系 -->
<many-to-one name="survey" class="Survey" column="surveyid" />

<!-- 映射从Page到Question之间一对多关联关系 -->
<set name="questions" inverse="true">
<key column="pageid" />
<one-to-many class="Question"/>
</set>
</class>
</hibernate-mapping>


[Question.hbm.xml]
<hibernate-mapping package="com.atguigu.surveypark.model">
<class name="Question" table="questions">
<id name="id" column="id" type="integer">
<generator class="identity" />
</id>
<property name="questionType" column="questiontype" type="integer" />
<property name="title" column="title" type="string" length="100" />
<property name="options" column="options" type="string" length="200" />
<property name="other" column="other" type="boolean"/>
<property name="otherStyle" column="otherstyle" type="integer" />
<property name="otherSelectOptions" column="otherselectoptions" type="string" length="200" />

<property name="matrixRowTitles" column="maxtrixrowtitles" type="string" length="200" />
<property name="matrixColTitles" column="matrixcoltitles" type="string" length="200" />
<property name="matrixSelectOptions" column="matrixselectoptions" type="string" length="200" />

<!-- 映射从Question到Page之间多对一关联关系 -->
<many-to-one name="page" class="Page" column="pageid" />
</class>
</hibernate-mapping>


详细代码如下:

Page.java

package com.atguigu.surveypark.model;

import java.util.HashSet;
import java.util.Set;

/**
 * 页面类
 */
public class Page {
	private Integer id;
	private String title = "未命名";
	private String description;

	//简历从Page到Survey之间多对一关联关系
	private Survey survey;

	//简历从Page到Question之间一对多关联关系
	private Set<Question> questions = new HashSet<>();

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public Survey getSurvey() {
		return survey;
	}

	public void setSurvey(Survey survey) {
		this.survey = survey;
	}

	public Set<Question> getQuestions() {
		return questions;
	}

	public void setQuestions(Set<Question> questions) {
		this.questions = questions;
	}

}

Page.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.atguigu.surveypark.model">
	<class name="Page" table="pages">
		<id name="id" column="id" type="integer">
			<generator class="identity" />
		</id>
		<property name="title" column="title" type="string" length="100" />		
		<property name="description" column="description" type="string" length="200" />
		
		<!-- 映射从Page到Survey之间多对一关联关系 -->
		<many-to-one name="survey" class="Survey" column="surveyid" />
		
		<!-- 映射从Page到Question之间一对多关联关系 -->
		<set name="questions" inverse="true">
			<key column="surveyid" />
			<one-to-many class="Question"/>
		</set>
	</class>
</hibernate-mapping>


Survey.java

package com.atguigu.surveypark.model;

import java.util.Date;

/**
 * 调查类
 */
public class Survey {
	private Integer id;
	private String title = "未命名";
	private String preText = "上一步";
	private String nextText = "下一步";
	private String exitText = "退出";
	private String doneText = "完成";
	private Date createTime = new Date();
	
	//建立从Survey到User之间多对一关联关系
	private User user ;

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getPreText() {
		return preText;
	}

	public void setPreText(String preText) {
		this.preText = preText;
	}

	public String getNextText() {
		return nextText;
	}

	public void setNextText(String nextText) {
		this.nextText = nextText;
	}

	public String getExitText() {
		return exitText;
	}

	public void setExitText(String exitText) {
		this.exitText = exitText;
	}

	public String getDoneText() {
		return doneText;
	}

	public void setDoneText(String doneText) {
		this.doneText = doneText;
	}

	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

}

Survey.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.atguigu.surveypark.model">
	<class name="Survey" table="surveys">
		<id name="id" column="id" type="integer">
			<generator class="identity" />
		</id>
		<property name="title" column="title" type="string" length="200" />		
		<property name="preText" column="pretext" type="string" length="50" />		
		<property name="nextText" column="nexttext" type="string" length="50" />		
		<property name="doneText" column="donetext" type="string" length="50" />		
		<property name="exitText" column="exittext" type="string" length="50" />		
		<property name="createTime" column="createtime" type="string" length="200" />		
		
		<!-- 映射从Survey到User之间多对一关联关系 -->
		<many-to-one name="user" class="User" column="userid" />
		
		<!-- 映射从Survey到Page之间一对多关联关系 -->
		<set name="pages" inverse="true">
			<key column="surveyid" />
			<one-to-many class="Page"/>
		</set>
	</class>
</hibernate-mapping>

Question.java:

package com.atguigu.surveypark.model;

/**
 * 问题类
 */
public class Question {
	//
	private Integer id;
	// 题型0-8
	private int questionType;
	//
	private String title;
	// 选项
	private String options;

	// 其他项
	private boolean other;

	// 其他项样式:0-无 1-文本框 2-下拉列表
	private int otherStyle;

	// 其他项下拉选项
	private String otherSelectOptions;

	// 矩阵式行标题集
	private String matrixRowTitles;

	// 矩阵式列标题集
	private String matrixColTitles;
	// 矩阵是下拉选项集
	private String matrixSelectOptions;

	//建立从Question到Page之间多对一关联关系
	private Page page;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public int getQuestionType() {
		return questionType;
	}

	public void setQuestionType(int questionType) {
		this.questionType = questionType;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getOptions() {
		return options;
	}

	public void setOptions(String options) {
		this.options = options;
	}

	public boolean isOther() {
		return other;
	}

	public void setOther(boolean other) {
		this.other = other;
	}

	public int getOtherStyle() {
		return otherStyle;
	}

	public void setOtherStyle(int otherStyle) {
		this.otherStyle = otherStyle;
	}

	public String getOtherSelectOptions() {
		return otherSelectOptions;
	}

	public void setOtherSelectOptions(String otherSelectOptions) {
		this.otherSelectOptions = otherSelectOptions;
	}

	public String getMatrixRowTitles() {
		return matrixRowTitles;
	}

	public void setMatrixRowTitles(String matrixRowTitles) {
		this.matrixRowTitles = matrixRowTitles;
	}

	public String getMatrixColTitles() {
		return matrixColTitles;
	}

	public void setMatrixColTitles(String matrixColTitles) {
		this.matrixColTitles = matrixColTitles;
	}

	public String getMatrixSelectOptions() {
		return matrixSelectOptions;
	}

	public void setMatrixSelectOptions(String matrixSelectOptions) {
		this.matrixSelectOptions = matrixSelectOptions;
	}

	public Page getPage() {
		return page;
	}

	public void setPage(Page page) {
		this.page = page;
	}
}

Question.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.atguigu.surveypark.model">
	<class name="Question" table="questions">
		<id name="id" column="id" type="integer">
			<generator class="identity" />
		</id>
		<property name="questionType" column="questiontype" type="integer" />
		<property name="title" column="title" type="string" length="100" />		
		<property name="options" column="options" type="string" length="200" />
		<property name="other" column="other" type="boolean"/>
		<property name="otherStyle" column="otherstyle" type="integer" />
		<property name="otherSelectOptions" column="otherselectoptions" type="string" length="200" />
		
		<property name="matrixRowTitles" column="maxtrixrowtitles" type="string" length="200" />
		<property name="matrixColTitles" column="matrixcoltitles" type="string" length="200" />
		<property name="matrixSelectOptions" column="matrixselectoptions" type="string" length="200" />
		
		<!-- 映射从Question到Page之间多对一关联关系 -->
		<many-to-one name="page" class="Page" column="pageid" />
	</class>
</hibernate-mapping>


User.java
package com.atguigu.surveypark.model;

import java.util.Date;

/**
 * 用户类
 */
public class User {
	private Integer id;
	private String email;
	private String name;
	private String password;
	private String nickName;
	//注册时间
	private Date regDate = new Date();

	public Integer getId() {
		return id;
	}
	
	public Date getRegDate() {
		return regDate;
	}



	public void setRegDate(Date regDate) {
		this.regDate = regDate;
	}



	public void setId(Integer id) {
		this.id = id;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getNickName() {
		return nickName;
	}

	public void setNickName(String nickName) {
		this.nickName = nickName;
	}

}

User.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.atguigu.surveypark.model.User" table="users">
		<id name="id" column="id" type="integer">
			<generator class="identity" />
		</id>
		<property name="email" column="email" type="string" length="50" />
		<property name="password" column="password" type="string" length="50" />
		<property name="nickName" column="nickname" type="string" length="50" />
		<property name="regDate" column="regdate" type="timestamp"  update="false"/>
	</class>
</hibernate-mapping>