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

本文介绍了一个调查问卷系统的数据库设计及实体类映射关系,包括用户、调查、页面和问题等核心组件的设计细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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


表设计:




设计好后:

写实体类

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

概述

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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值