电费管理系统E-R图及数据库表设计
基于E-R模型的配电网数据库管理系统优化设计

199当前配电网络中用户节点繁多,存在大量数据,相互间的关联错综复杂并且变换频繁,因而数据库设计是研究者科研的重要课题。
传统的设计方法分为两类,一类是在输电网络数据库中依据层级构造建模,搭建网状节点模型,但忽视了特殊配电网络构造,并存在后期维护工作繁琐的弊端;另一类则将线路转换为杆塔方式搭建,被设置变配和开闭装备,该方法操作简单,但数据库不易更新,灵活度不高。
1 配电网络的E-R模型搭建1.1 E-R模型下的配电网络建模(1)配电网络的实体。
E-R模型由实体,连接和属性构成。
实体作为数据目标,即应用过程中的客观事物,如配电网中的变压装置,输电线路等部分。
而相同类别的实体则构成实体类,如配电网络中的变压装置行程配电变压实体部分。
(2)配电网络的连接。
由于实体之间并不孤立并存在相互关联,而配电网络的连接代表了一个和多个实体间连接。
如配电变压装置和用电负荷间的电能供应关联。
(3)配电网络的属性。
配电网络的属性能够表述实体的特点,如配电变压装置的名字,编码,容量等相关属性数据[1]。
1.2 配电网络中的杆塔和开关在配电网络体系中,每条配电线路均包含多个杆塔和开关,并包含几十个到几百个分支线路,各部分线路采用配电变压装置的模式给使用者供电,信息量巨大,因而构建科学的信息模型对设计数据库有很大帮助。
1.3 变阻抗支路设计在整个配电网络中,线路间经过开关完成互联,而开关是物理存在的实体并不从属于相关线路。
在构建配电数据集合时,为获取线路间的关联,需串接变阻抗支路,完成上游电源部分和下游各节点间通讯。
2 E-R模型的配电网数据库设计2.1 E-R模型下配电网络数据库组成(1)线路数据库。
线路数据库基准数据组成包含信息标识,线路表述,衔接变电装置,电压层级部分。
(2)分线路数据库。
分线路数据库线路标定,线段标定,供电部分标定,并给出线路表述,线段种类,杆塔数目,阻抗和电压等级等部分。
(3)配电变压装置数据库。
配电变压装置数据集合包含名字,编码,种类,容量,供电线路标定,衔接杆编码等部分。
数据库E-R图

基本任务
消除不必要的冗余,设计生成基本E-R图
分E-R图
合并 初步E-R图 可能存在冗余的数据 和冗余的实体间联系 消除不必要的冗余
基本E-R图
1.冗余 消除不必要的冗余后的初步E-R图称为基本E-R图。 分析法消除冗余实例:
(1)例,教师工资单中包括该教师的基本工资、各种 补贴、应扣除的房租水电费以及实发工资。由于实发 工资可以由前面各项推算出来,因此可以去掉,在需 要查询实发工资时根据基本工资、各种补贴、应扣除 的房租水电费数据临时生成。 (2) 教室实体与班级实体的上课联系可以由教室与课程 之间的开设联系、课程与学生之间的选修联系、学生与 班级之间的组成联系三者推导出来,因此属于冗余联系, 可以消去。
3)M:N的联系,即多对多的联系 A中任意实体至少有一个实体对应B中的多个实体, 反之B中的任意实体至少有一个实体对应A中的多 个实体。 “学生”(A)是一种实体,“课程”(B)也是一种 实体。这两种实体之间存在一种联系,设这种联系 命名为“选课”,表示的是哪一个学生修了哪些门 课程。这个联系是M:N的,也就是说,一个学生 可以修多门课程,一门课程可以有多个学生来修, 但一个学生不一定修所有的课程,一门课程也不一 定被全部学生所选修。在E-R图中,这两种实体间 的联系可以表示如下图
1
拥有 成绩 m m 学生 选修 n
在E-R图中概念及术语 (1)实体与实体类型 实体:可以相互区别客观事物和概念的统一抽象。 是任何一种我们所关心的“事物”,可以指人,也 可以指物,可以是实际的东西,也可以是抽象的、 概念性的东西。 例 学生、回扣、医疗等。实体分为两级,一级为 “个体”,如“张三”、“国防科技大学”等;另 一级为“总体”,泛指某一类个体组成的集合,如 人泛指“张三”、 “李四”等。实体类型:将具 有共性的一类实体抽象为实体类型。在E-R图中, 实体这种基本成份用方框来表示。
数据库E-R图范例

选课(学号,课号,成绩) 教课(教师号,课程号)
课号
课程名
选修
厂名
厂长
地址
工厂(厂名,厂长,地址)
工厂 m 工厂-- 产品-- 用户 n 产品 n 用户
产品(编号,型号,单价)
ห้องสมุดไป่ตู้
用户(姓名,地址,电话)
工厂-产品-用户(厂名,编号,姓名)
编号
型号
单价
姓名
地址
电话
单位名
电话
单位
1 管理 n 学生
出版社编号 出版社名称
地址
联系方式
出版社(出版社编号,出版社名,地址,联系方式) 出版社 作者(作者编号,姓名,出生日期,电话,职业) 出版(出版社编号,作者编号,出书数量)
n 出版
m 作者
出书数量
作者编号
姓名
出生日期
电话
职业
读者号
姓名
性别
年龄
地址 读者(读者号,姓名,性别,年龄,地址)
读者 1 借书 n 书
书(书号,书名,作者,出版社) 借书(读者号,书号,借出日期,应还日期)
借出日期 应还日期
书号
书名
作者
出版社
学号 姓名
性别
年龄
教师号 姓名
性别 教研组
学生
n 成绩 选课
n
教学
m
教师
n 教课
学生(学号,姓名,性别,年龄) 教师(教师号,姓名,性别,教研组) 课程(课号,课程名,选修)
教学(学号,教师号)
1
开课
n
m
选修
n
课程
学号
姓名
性别
年龄
课程号
数据库课程设计电力公司收费系统

数据库课程设计电力公司收费系统数据库课程设计题目某电力公司收费管理信息系统专业班级姓名学号完成日期 -12-18一、课程实验目的1.经过课程设计,使学生进一步巩固所学的知识,考查学生对数据库理论及知识的理解能力和综合运用能力;2.培养学生自主学习、独立思考的能力,学会查找资料并善于分析资料的能力;3.培养学生独立设计、独立调试程序的能力;4.培养学生初步的软件设计能力,形成良好的编程风格二、课程实验要求(28)某电力公司收费管理信息系统1.实现客户信息、用电类型(类别号、类别名、电价)及业务员管理;2.实现客户用电信息管理(客户号、月份、用电类别号、用电度数);3.实现客户费用管理(客户号、月份、费用、收费标志),收费标志的默认值为‘未收’;4.实现收费登记(客户、月份、应收费用、实收费用、业务员),并自动修改收费标志(用触发器实现);5.创立触发器,实现收费时自动更加应收费用和实收费用,计算本次结余,然后修改客户信息表中的结余金额;6.创立存储过程统计指定月份应收费用和实收费用;7.创立存储过程查询指定月份未交费的用户信息,以便崔费;8.创立规则使得月份符合格式“××××年××月”,并邦定到表中相应字段;9.建立表间关系。
三、课程设计要求1.在对数据库理论及知识理解的基础上;重点是针对具体的实际问题选择并设计合适的数据库表加以应用,并在此基础上完成相关的算法与程序;2.给出系统的概要设计、详细设计;3.完成数据流程图,E-R关系图,数据库表、程序流程图、功能模块图的设计、对功能编程加以实现;4.设计必要的视图、触发器、存储过程;5.使用相关的编程工具(C#.NET)和ORACLE编写代码实现设计的数据库系统;6.完成规范化的课程设计报告的编写;7.每个同学完成一个题目,题目由老师安排。
四、实验环境VS ,SQLsever五、课程设计过程1. 根据题目写出关系模型如下:①客户(客户号、客户名、地址、联系方式)②用电类型(类别号、编号、类别名、电价)③员工(员工号、姓名、性别、联系方式)④用电信息(客户号、月份、类别号、用电度数)⑤费用管理(客户号、月份、费用、收费标志)⑥收费登记(客户号、月份、应收费用、实收费用、员工号)⑦结余登记(客户号、月份、应收费用、实收费用、结余费用)2、根据关系模型绘制出E-R模型为:3、创立表1.客户表Create table 客户(客户号 char(5) PRIMARY KEY,客户名 char(4),地址 varchar(50),联系方式 char(10));插入数据:Insert into 客户 values('00001','张三','市南区','0000000'); Insert into 客户 values('00002','李四','黄岛区','0000002'); Insert into 客户 values('00003','王五','崂山区','0000003'); Insert into 客户 values('00004','赵兰','城阳区','0000004'); Insert into 客户 values('00005','李青','黄岛区','0000005'); Insert into 客户 values('00006','张倩','市南区','0000001');2.用电类型表Create table 用电类型(类别号 char(10) PRIMARY KEY,类别名 varchar(50),电价 money);插入数据:Insert into 用电类型 values('ABC','家庭','1.00');Insert into 用电类型 values('ABD','政府','2.00');Insert into 用电类型 values('ABE','工厂','1.50'); Insert into 用电类型 values('ABF','学校','2.50'); Insert into 用电类型 values('ABG','医院','0.50');3.员工表Create table 员工(员工号 char(5) PRIMARY KEY,姓名 char(20),性别 char(10),联系方式 char(20));插入数据:Insert into 员工 values('12345','李丽','女','1230000'); Insert into 员工 values('12346','王华','男','1230002'); Insert into 员工 values('12347','张悦','女','1230003');4.用电信息表Create table 用电信息(客户号 char(5) ,类别号 char(10) ,月份 date ,用电度数 char(8),primary key (客户号,类别号,月份),foreign key (客户号) references 客户(客户号),foreign key (类别号) references 用电类型(类别号));Insert into 用电信息 values('00001','ABC',' -12-01','100'); Insert into 用电信息 values('00001','ABE',' -12-01','220'); Insert into 用电信息 values('00002','ABC',' -12-01','110'); Insert into 用电信息 values('00003','ABE',' -11-01','125'); Insert into 用电信息 values('00003','ABE',' -12-01','105'); Insert into 用电信息 values('00004','ABC',' -12-01','200'); Insert into 用电信息 values('00005','ABC',' -12-01','102'); Insert into 用电信息 values('00006','ABC',' -12-01','100');5.费用管理Create table 费用管理(客户号 char(5) ,月份 date ,费用 money,收费标志 varchar(50),PRIMARY KEY (客户号,月份),foreign key (客户号) references 客户(客户号)6.收费登记Create table 收费登记(客户号 char(5),月份 date ,应收费用 money,实收费用 money,员工号 char(5),PRIMARY KEY (客户号,月份),foreign key (员工号) references 员工(员工号) );7.结余登记Create table 结余登记(客户号 char(5),月份 date ,应收费用 money,实收费用 money,结余费用 money,PRIMARY KEY (客户号,月份)4.创立触发器触发器1:计算费用create trigger change_trigger1on 用电信息for insertasinsertinto 费用管理 (客户号,月份,费用)SELECT inserted.客户号,inserted.月份,inserted.用电度数*(select 电价from 用电类型,inserted where 用电类型.类别号=inserted.类别号)FROM inserted;触发器2:未收标志create trigger change_trigger on 费用管理for insertasupdate 费用管理 set 收费标志='未收';触发器3:已收标志create trigger change_trigger3on 收费登记for updateasupdate 费用管理 set 收费标志='已收'from 费用管理,insertedwhere 费用管理.客户号=inserted.客户号and 费用管理.月份=inserted.月份;触发器4:结余登记create trigger change_trigger4on 收费登记for updateasinsert into 结余登记select inserted.客户号, inserted.月份,inserted.应收费用,inserted.实收费用,inserted.实收费用-inserted.应收费用from inserted;5.建立存储存储过程1:应收费用,实收费用create procedure ch_procedure01 @month dateasbeginselect 月份,应收费用,实收费用from 收费登记where 收费登记.月份=@month endgo存储过程2:未收费create procedure ch_procedure02 @month dateasbeginselect 客户号,月份,结余费用from 结余登记where 结余登记.月份=@month order by 结余费用endgo6.表间关系六、代码实现过程1.显示窗体内的内容及表的内容private void Form5_Load(object sender, EventArgs e){string consqlserver = "Data Source=GXW-PC;Initial Catalog=liqiuyue0;Integrated Security=True";//string consqlserver = "Data Source=CHEN-PC;Initial Catalog=rl;Integrated Security=True";//定义连接数据源string sql = "select * from 用电信息 ";SqlConnection sqlcon = new SqlConnection(consqlserver);sqlcon.Open();SqlDataAdapter da = new SqlDataAdapter(sql, sqlcon);DataSet ds = new DataSet();//shengmingtry{da.Fill(ds);if (ds.Tables[0].Rows.Count > 1) //判断是否有符合条件的数据记录{//将获得数据源赋予数据库控件dataGridView1.DataSource = ds.Tables[0];}}catch (Exception ex){throw new Exception(ex.ToString());}finally{sqlcon.Close();sqlcon.Dispose();da.Dispose();}}结果如图所示:2.插入一行信息的代码private void label3_Click(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){string consqlserver = "Data Source=GXW-PC;Initial Catalog=liqiuyue0;Integrated Security=True";// string sql = "select * from 客户 ";SqlConnection sqlcon = new SqlConnection(consqlserver);sqlcon.Open();try{// 首先判断输入信息是否完全if (textBox1.Text == ""){MessageBox.Show("请输入完整的数据信息", "信息提示", System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Warning);}else{DataSet ds = new DataSet();// 在此判断保存重复记录问题string strSqls;strSqls = string.Format("SELECT * FROM 用电信息where 客户号='" + textBox1.Text.Trim() + "'and 类别号='" + textBox2.Text.Trim() + "'and 月份='" + textBox3.Text.Trim() + "';");//定义SQL Server连接对象SqlDataAdapter da = new SqlDataAdapter(strSqls, sqlcon);da.Fill(ds);if (ds.Tables[0].Rows.Count > 1){MessageBox.Show("已经存在", "信息提示", System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Error);}else{strSqls = "insert into 用电信息values ('" + textBox1.Text.Trim() + "','" + textBox2.Text.Trim() + "','" + textBox3.Text.Trim() + "','" + textBox4.Text.Trim() + "');";//定义SQL Server连接对象///////////////////SqlConnection sqlcon1 = new SqlConnection(consqlserver);SqlCommand cmd = new SqlCommand(strSqls, sqlcon1); try{sqlcon1.Open();cmd.ExecuteNonQuery();}catch { }finally{sqlcon1.Close();sqlcon1.Dispose();cmd.Dispose();}MessageBox.Show("保存成功", "信息提示", System.Windows.Forms.MessageBoxButtons.OK,rmation);//刷新数据string sqls = "select * from 用电信息 ";SqlDataAdapter da1 = new SqlDataAdapter(sqls, sqlcon); da1.Fill(ds);if (ds.Tables[0].Rows.Count > 1){dataGridView1.DataSource = ds.Tables[0];}}}catch { }}结果如图所示:3.修改一行信息的内容private void button2_Click(object sender, EventArgs e){string consqlserver = "Data Source=GXW-PC;Initial Catalog=liqiuyue0;Integrated Security=True";// string sql = "select * from 客户 ";SqlConnection sqlcon = new SqlConnection(consqlserver);sqlcon.Open();{if (textBox1.Text == ""){MessageBox.Show("请输入客户号,类别号,月份", "信息提示", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning);}else{DataSet ds = new DataSet();string strSqls = string.Format("SELECT * FROM 用电信息where 客户号='" + textBox1.Text.Trim() + "'and 类别号='" + textBox2.Text.Trim() + "'and 月份='" + textBox3.Text.Trim() + "';");// string strSqls = string.Format("SELECT * FROM 客户where 客户号='" + textBox1.Text.Trim() + "'");// string strSqls = string.Format("update teacher set tname='" + textBox2.Text.Trim() + "'where tno='" + textBox1.Text.Trim() + "'");SqlConnection con = new SqlConnection(consqlserver);SqlDataAdapter da = new SqlDataAdapter(strSqls, con);//定义SQL Server连接对象da.Fill(ds);int tnum = dataGridView1.CurrentRow.Index;//先选中某一行string oldDate = dataGridView1.Rows[tnum].Cells["月份"].Value.ToString();string oldLeibie = dataGridView1.Rows[tnum].Cells["类别号"].Value.ToString();// strSqls = string.Format("update 客户set 客户名='" + textBox2.Text.Trim() + "'where 客户号='" + textBox1.Text.Trim() + "'update 客户 set 地址='" + textBox3.Text.Trim() + "'where 客户号='" + textBox1.Text.Trim() + "'update 客户set 联系方式='" + textBox4.Text.Trim() + "'where 客户号='" + textBox1.Text.Trim() + ""); strSqls = string.Format("update 用电信息 set 类别号='" + textBox2.Text.Trim() + "',月份='" + textBox3.Text.Trim() + "',用电度数='" + textBox4.Text.Trim() + "'where 客户号='" + textBox1.Text.Trim() + "'and 类别号='" + oldLeibie + "'and 月份='" + oldDate + "';");SqlConnection cons = new SqlConnection(consqlserver);SqlCommand cmd = new SqlCommand(strSqls, cons);try{cons.Open();cmd.ExecuteNonQuery();}catch { }finally{cons.Close();cons.Dispose();cmd.Dispose();}MessageBox.Show("修改成功", "信息提示", System.Windows.Forms.MessageBoxButtons.OK,rmation);//刷新数据string sqls = "select * from 用电信息";SqlDataAdapter da1 = new SqlDataAdapter(sqls, con);DataSet dss = new DataSet();da1.Fill(dss);if (dss.Tables[0].Rows.Count > 1){dataGridView1.DataSource = dss.Tables[0];}}catch { }}运行结果如图所示:(注应该先选中,在修改,目的改主码)5.删除一行信息的内容private void button3_Click(object sender, EventArgs e){string consqlserver = "Data Source=GXW-PC;Initial Catalog=liqiuyue0;Integrated Security=True";SqlConnection sqlcon = new SqlConnection(consqlserver);sqlcon.Open();tryif (textBox1.Text == ""){MessageBox.Show("请选择或输入要删除的信息", "信息提示", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning);}else{DataSet ds = new DataSet();// 判断要删除的数据信息是否存在string strSqls;strSqls = string.Format("SELECT * FROM 用电信息where 客户号='" + textBox1.Text.Trim() + "'and 类别号='" + textBox2.Text.Trim() + "'and 月份='" + textBox3.Text.Trim() + "';");// strSqls = string.Format("SELECT * FROM 客户 where 客户号='" + textBox1.Text.Trim() + "'");//定义SQL Server连接对象SqlConnection con = new SqlConnection(consqlserver);SqlDataAdapter da = new SqlDataAdapter(strSqls, con);da.Fill(ds);if (ds.Tables[0].Rows.Count > 0){if (MessageBox.Show("确认要删除吗?", "信息提示", System.Windows.Forms.MessageBoxButtons.YesNo,System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes){//定义删除数据信息的SQL语句strSqls = string.Format("delete from 用电信息where 客户号='" + textBox1.Text.Trim() + "'and 类别号='" + textBox2.Text.Trim() + "'and 月份='" + textBox3.Text.Trim() + "';");//定义SQL Server连接对象SqlConnection cons = new SqlConnection(consqlserver);SqlCommand cmd = new SqlCommand(strSqls, cons); try{cons.Open();cmd.ExecuteNonQuery();}catch { }finally{cons.Close();cons.Dispose();cmd.Dispose();}MessageBox.Show("信息删除成功", "信息提示", System.Windows.Forms.MessageBoxButtons.OK,rmation);//刷新数据string sqls = "select * from 用电信息 ";SqlDataAdapter da1 = new SqlDataAdapter(sqls, con); DataSet dss = new DataSet();da1.Fill(dss);if (dss.Tables[0].Rows.Count > 0){dataGridView1.DataSource = dss.Tables[0];}}}}}catch { }}}}七、运行结果展示:触发器实现自动修改和计算:每当添加一个新值,收费标志自动改成未收存储过程的实现,实现存储指定日期的应收费用和实收费用八、总结与心得体会经过几月的课程设计,还是简单地完成了“某电力公司收费管理信息系统”题目的相关要求。
数据库表设计—水电费缴费系统

数据库表设计—⽔电费缴费系统⽔电缴费管理系统数据表设计SQL建表脚本:1--建表2--管理⼈员表 admin3create table admin(4 admin_id varchar2(3) not null,5 admin_loginname varchar2(8) not null,6 admin_password varchar2(6) not null,7 admin_username varchar2(4) not null,8constraint pk_admin primary key(admin_id)9 );10 comment on column admin.admin_id is'管理员编号';11 comment on column admin.admin_loginname is'管理员登录⽤户名';12 comment on column admin.admin_password is'管理员登录密码';13 comment on column admin.admin_username is'管理员姓名';14--⽤户基本信息表 user15create table users(16user_id varchar2(10) not null,17 user_loginname varchar2(8) not null,18 user_password varchar2(6) not null,19 user_username varchar2(4) not null,20 user_address varchar2(20) not null,21 user_phone number(11) not null,22constraint pk_users primary key(user_id)23 );24 comment on column er_id is'⽤户编号';25 comment on column er_loginname is'⽤户登录名';26 comment on column er_password is'⽤户登录密码';27 comment on column er_username is'⽤户姓名';28 comment on column er_address is'⽤户地址';29 comment on column er_phone is'⽤户电话';30--⽔表 water31create table water(32 water_id varchar2(10) not null,33 userid varchar2(10) not null,34 water_count number(3,2) not null,35 water_time date not null,36 water_status number(1) not null,37 water_priceid varchar2(10) not null,38 water_beforecount number(3,2) not null,39constraint pk_water primary key(water_id)40 );41 comment on column water.water_id is'⽔表编号';42 comment on column erid is'⽤户编号';43 comment on column water.water_count is'⽔表跑数';44 comment on column water.water_time is'⽔表时间';45 comment on column water.water_status is'⽔费缴费状态';46 comment on column water.water_priceid is'⽔费价格编号';47 comment on column water.water_beforecount is'上⽉⽔表跑数'; 48--⽔表 power49create table power(50 power_id varchar2(10) not null,51 userid varchar2(10) not null,52 power_count number(3,2) not null,53 power_time date not null,54 power_status number(1) not null,55 power_priceid varchar2(10) not null,56 power_beforecount number(3,2) not null,57constraint pk_power primary key(power_id)58 );59 comment on column power.power_id is'电表编号';60 comment on column erid is'⽤户编号';61 comment on column power.power_count is'电表跑数';62 comment on column power.power_time is'电表时间';63 comment on column power.power_status is'电费缴费状态';64 comment on column power.power_priceid is'电费价格编号';65 comment on column power.power_beforecount is'上⽉电表跑数'; 66--价格表 money67create table price(68 price_id varchar2(10) not null,69 price_time date not null,70 isactive number(1) not null,71 waterprice number(2,2) not null,72 powerprice number(2,2) not null,73constraint pk_price primary key(price_id)74 );75 comment on column price.price_id is'价格编号';76 comment on column price.price_time is'价格⽇期';77 comment on column price.isactive is'价格状态';78 comment on column price.waterprice is'⽔费价格';79 comment on column price.powerprice is'电费价格';管理员表:⽤户表:⽔费表:电费表:价格表:。
学校水电交费系统E

学校水电交费系统E —R 图:1 NNN 1 N转化的关系模式如下:学生关系模式(智能卡号,姓名,学号,宿舍号) 教师关系模式(智能卡号,姓名,门牌号) 水关系模式(水单价,水类型) 电关系模式(电单价,电类型)水费关系模式(实用吨数,智能卡号,水单价,应交费用,上月水表数,本月水表数) 电费关系模式(实用电数,智能卡号,电单价,应交费用,上月电表数,本月电表数)建立水电缴费数据库SDJF数据库中新建6张表格(每个对象对应一张)学生 水费教师 电 电费 智能卡号姓名 门牌号实用吨数 本月水表读数 上月水表读数 上月电表数姓名 实用电数 本月电表数 智能卡号 宿舍号 学号 水类型 水单价 电单价 电类型 应交费用 应交费用水学生表student的结构列名描述数据类型允许空值说明card 智能卡号Char(12) No 主键S_name 姓名Char(8) yesS_no 学号Char(8) yesS_room 宿舍号Char(4)no教师表teacher的结构列名描述数据类型允许空值说明card 智能卡号Char(12)No 主键T_name 姓名Char(8)YesT_room 门牌号Char(4)no水表water的结构列名描述数据类型允许空值说明W_price 水单价Char(6)No 主键W_type 用水类型Char(4)yes电表electric的结构列名描述数据类型允许空值说明E_price 电单价Char(6)No 主键E_type 用电类型Char(4)yes水费表Watercost的结构列名描述数据类型允许空值说明Weight 实用吨数Char(10)No 主键Card 智能卡号Char(12)No 主键(同时是外键)W_price 水单价Char(6)No 主键(同时是外键)Cost 应缴费用CHAR(8) NoAmonth 上月水表数Char(7)NoPmonth 本月水表数Char(7) no水费表electriccost的结构列名描述数据类型允许空值说明degree 实用度数Char(10)No 主键Card 智能卡号Char(12)No 主键(同时是外键)E_price 电单价Char(6)No 主键(同时是外键)Cost 应缴费用CHAR(8) NoAmonth 上月电表数Char(7)NoPmonth 本月电表数Char(7) no。
数据库设计(一)E-R图

数据库设计(⼀)E-R图数据库设计定义: 指的是将应⽤中涉及的数据实体及这些数据实体之间的关系,进⾏规划和结构化的过程。
影响数据库系统效率的因素:数据库中创建的数据结构种类,以及在数据实体之间建⽴的关系好的设计:效率⾼,便于进⼀步扩展,使应⽤程序的开发变得容易糟糕的设计:效率低下,更新和检索数据时会出现许多问题。
⼀、设计的步骤:⼀般在项⽬开发需要经过:需求分析、概要设计、详细设计、代码编写、运⾏测试和部署上线这⼏个阶段,⽽数据设计在这⼏个阶段主要做的事,如下:(当然上线后有时也会出现改需求,动代码动数据库)//数据库设计时需要注意的需求分析阶段:分析客户业务和数据处理需求概要设计阶段:绘制数据库的E-R图,⽤于在项⽬团队内部、设计⼈员和客户之间的沟通,确认需求信息的正确性和完整性。
详细设计阶段:将E-R 图转换为多张表,进⾏逻辑设计,确认各表的主外键,并应⽤数据库设计的三⼤范式进⾏审核。
经项⽬开会讨论确定后,根据项⽬的技术实现、团队开发能⼒进⾏项⽬的成本预算,选择具体的数据库进⾏物理实现,之后就是开发应⽤程序注意:在需求分析阶段的重点是调查、收集并分析客户业务的数据需求、处理需求、安全性与完整性需求。
常⽤的需求调研⽅法:在客户的公司跟班实习、组织召开调查会、邀请专⼈介绍、设计调查表并请⽤户填写和查阅与业务相关的数据记录等。
常⽤的需求分析⽅法:调查客户的公司组织情况、各部门的业务需求情况、协助客户分析系统的各种业务需求和确定新系统的边界。
//在进⾏数据库系统分析时可参考的基本步骤1、收集信息:创建数据库之前,必须充分理解数据库需要完成的任务和功能,了解数据库需要存储哪些数据、实现哪些功能2、标识实体:收集信息后,标识数据库要管理的关键对象或实体。
(实体⼀般是名词,⼀个实体只描述⼀件事情,不能出现含义相同的实体,⽽且实体可以是有形的事物(如⼈或产品),也可以是⽆形的事物(如部门,时间))3、标识每个实体需要存储的详细信息:将数据库中的主要实体标⽰为表的候选实体以后,就要标识每个实体存储的详细信息,也称为该实体的属性,这些属性将组成表中列。
数据库设计 - C2 - E-R图和表.pptx

绘制E-R图 • E-R(Entity-Relationship)实体关系图
符合 含义 实体,一般是名词
属性,一般是名词
关系,一般是动词
概念模型 • 联系分为:一对一(1:1)、一对多(1:n)、多对 多(m:n)
【例1 】两个实体集之间的一对一的联系的绘制方法。 假设某学院有若干个系,每个系只有一个主任。则 主任和系之间是一对一的关系。 主任和系的属性分别如下: 主任——编号,姓名,年龄,学历; 系——系编号,系名 主任和系之间是一个管理关系
• 需求分析阶段:分析客户的业务和数据处理需求; • 概要设计阶段:设计数据库的E-R模型图,确认需求信息的正确和完 整; • 详细设计阶段:将E-R图转换为多张表,进行逻辑设计,并应用数据 库设计的三大范式进行审核; • 代码编写阶段:选择具体数据库进行物理实现,并编写 代码实现前端应用; • 软件测试阶段:…… • 安装部署:……
BuyerID Country City
1 1 4 2 … 中国 中国 日本 美国 … 北京 北京 东京 纽约 …
• 第一范式的目标是确保每列的原子性
• 如果每列都是不可再分的最小数据单元(也称为最小的原 子单元),则满足第一范式(1NF)
第二范式 (2nd NF)
Orders
字 段 例 子 Orders 字 段 例 子 订单编号 001 订购日期 2000-2-3 Products 字 段 例 子
数据库系统分析的基本步骤-标识对象间关系2 • 标识对象之间的关系(Relationship)
• 跟贴和主贴有主从关系:我们需要在跟贴对象中表明 它是谁的跟贴; • 版块和用户有关系:从用户对象中可以根据版块对象 查出对应的版主用户的情况; • 主贴和版块有主从关系:需要表明发贴是属于哪个版 块的; • 跟贴和版块有主从关系:需要表明跟贴是属于哪个版 块的;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
false
状态:1正常,2冻结,3欠费,4过期
账户信息表
字段
类型
大小
允许空
主键
账号
nvarchar
20
not null
true
电表号
nvarchar
50
not null
false
所在区域
nvarchar
50
not null
false
用电类型
int
not null
false
缴费类型
bit
null
false
备注
nvarchar
100
null
false
转账记录表
字段
类型
大小
允许空
主键
ID
int
not null
true
转账卡号
nvarchar
20
not null
false
转入卡号
nvarchar
20
not null
false
转账金额
decimal
(18,2)
not null
false
转账时间
时间
datetime
not null
false
用电量
decimal
(18,2)
not null
false
电价
decimal
(18,2)
not null
false
用电金额
decimal
(18,2)
not null
false
抄表员
nvarchar
50
not null
false
录入员账号
nvarchar
20
not null
false
状态
int
not null
false
结算时间
datetime
null
false
备注
nvarchar
100
null
false
状态:1交齐,2未缴
结算记录表
字段
类型
大小
允许空
主键
ID
int
not null
true
结算金额
decimal
(18,2)
not null
false
结算时间
datetime
not null
false
操作员账号
nvarchar
20
not null
false
转账人
nvarchar
50
null
false
备注
nvarchar
100
null
false
用电记录表
字段
类型大小Leabharlann 允许空主键ID
int
not null
true
账号
nvarchar
20
not null
false
校园电费管理系统
E-R图
数据库表设计
用户信息表
字段
类型
大小
允许空
主键
账号
nvarchar
20
not null
true
账户名
nvarchar
50
not null
false
密码
nvarchar
15
not null
false
类型
int
not null
false
联系方式
nvarchar
15
not null
false
datetime
not null
false
结算员账号
nvarchar
20
not null
false
签收人
nvarchar
50
not null
false
备注
nvarchar
100
null
false
电价变动表
字段
类型
大小
允许空
主键
ID
int
not null
true
现电价
decimal
(18,2)
not null
字段
类型
大小
允许空
主键
ID
int
not null
true
充值卡号
nvarchar
20
not null
false
充值金额
decimal(18,2)
not null
false
充值时间
datetime
not null
false
操作员账号
nvarchar
20
not null
false
充值人
nvarchar
50
类型:1管理员,2录入员,3业务员,4用户
IC卡信息表
字段
类型
大小
允许空
主键
卡号
nvarchar
20
not null
true
有效日期
datetime
not null
false
余额
decimal
(18,2)
not null
false
持卡单位/个人
nvarchar
50
not null
false
状态
int
false
原电价
decimal
(18,2)
not null
false
调整日期
datetime
not null
false
录入人账号
nvarchar
20
not null
false
备注
nvarchar
100
null
false
not null
false
当前绑定卡号
nvarchar
20
null
false
用电类型:学生公寓,教职工校工家属公寓,个体经营商(商店,理发店,饭店,食堂窗口),教学科研(教学楼,实验室,图书馆),公共设施(体育场,路灯,广播),行政办公(办公楼,网络中心,就业中心)等
缴费类型:1自缴,2公缴
充值记录表