一、概念数据模型概述
数据模型是现实世界中数据特征的抽象。数据模型应该满足三个方面的要求:
1)能够比较真实地模拟现实世界
2)容易为人所理解
3)便于计算机实现
概念数据模型也称信息模型,它以实体-联系(Entity-RelationShip,简称E-R)理论为基础,并对这一理论进行了扩充。它从用户的观点出发对信息进行建模,主要用于数据库的概念级设计。
通常人们先将现实世界抽象为概念世界,然后再将概念世界转为机器世界。换句话说,就是先将现实世界中的客观对象抽象为实体(Entity)和联系(Relationship),它并不依赖于具体的计算机系统或某个DBMS系统,这种模型就是我们所说的CDM;然后再将CDM转换为计算机上某个DBMS所支持的数据模型,这样的模型就是物理数据模型,即PDM。
CDM是一组严格定义的模型元素的集合,这些模型元素精确地描述了系统的静态特性、动态特性以及完整性约束条件等,其中包括了数据结构、数据操作和完整性约束三部分。
1)数据结构表达为实体和属性;
2)数据操作表达为实体中的记录的插入、删除、修改、查询等操作;
3)完整性约束表达为数据的自身完整性约束(如数据类型、检查、规则等)和数据间的参照完整性约束(如联系、继承联系等);
二、实体、属性及标识符的定义
实体(Entity),也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物”。例如,学校中的每个学生,医院中的每个手术。
每个实体都有用来描述实体特征的一组性质,称之为属性,一个实体由若干个属性来描述。如学生实体可由学号、姓名、性别、出生年月、所在系别、入学年份等属性组成。
实体集(Entity Set)是具体相同类型及相同性质实体的集合。例如学校所有学生的集合可定义为“学生”实体集,“学生”实体集中的每个实体均具有学号、姓名、性别、出生年月、所在系别、入学年份等性质。
实体类型(Entity Type)是实体集中每个实体所具有的共同性质的集合,例如“患者”实体类型为:患者{门诊号,姓名,性别,年龄,身份证号.............}。实体是实体类型的一个实例,在含义明确的情况下,实体、实体类型通常互换使用。
实体类型中的每个实体包含唯一标识它的一个或一组属性,这些属性称为实体类型的标识符(Identifier),如“学号”是学生实体类型的标识符,“姓名”、“出生日期”、“信址”共同组成“公民”实体类型的标识符。
有些实体类型可以有几组属性充当标识符,选定其中一组属性作为实体类型的主标识符,其他的作为次标识符。
三、实体、属性及标识符的表达
一、新建概念数据模型 1)选择File-->New,弹出如图所示对话框,选择CDM模型(即概念数据模型)建立模型。

2)完成概念数据模型的创建。以下图示,对当前的工作空间进行简单介绍。


1.双击表格,打开属性窗口

2.Attributes属性设置

3.表结构

注意:一对多时从主表拉到从表(这个是从教师表拉到课程表)
4.生成物理模型



5.映射数据库模型

6.导出sql文件,供给数据库使用
注意:导出文件后,必须自己建数据库,或则是已经存在的数据库,然后导入文件
导入文件命令
source [文件绝对路径]
7.应用到django中
7.1在django配置数据库时
# setting 配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库类型
'NAME': 'school', # 数据库名
'HOST': 'yourhost', # 数据库主机号
'PORT': 3306,
'USER': 'root',
'PASSWORD': 'yourpassword',
}
}
# __init__ 配置
import pymysql
pymysql.install_as_MySQLdb() #如果遇到使用不了数据库的情况,请安装mysqlclient(pip install mysqlclient),然后注释掉本行内容。
7.2数据库迁移
命令行使用命令:
python manage.py migrate # 第一次执行迁移数据库
@如果需要在之后进行数据库更新
一:
python manage.py makemigrations # 生成迁移文件
二:
python manage.py migrate # 执行迁移文件
7.3将数据库模型反向映射到models
使用命令:
python manage.py inspectdb >app应用名/models.py# 生成models
@在models中需要修改的地方
@如果表之间有多对多的关联字段
@需要添加关联关系
@课程与学生是多对多的关系
class Student(models.Model):
student_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
birthday = models.DateField(blank=True, null=True)
sex = models.CharField(max_length=2)
# 以下是需要添加的一行
lessons = models.ManyToManyField(Lesson, through='StudentLesson')
class Meta:
managed = False
db_table = 'student'
django多对多查询
s1.lessons.all() # 查询到该学生的所有课程
l1.student_set.all() # 查询到该课程的所有学生
7.4终端交互使用命令
python manage.py shell
在flask中,如果使用了flask_script构建了manage.py也可以使用该命令进入交互端
网友评论