数据库设计(二)——简单设计实例
Mysql设计步骤
一、设计一套系统数据库的步骤
1、实现什么样的功能(保证项目功能的完整性,列出所有模块)。
2、通过思维导图将每个功能模块串联起来(放射状,细节可以用文字描述)。
3、数据库需求分析
1)、内容要求:调查应用系统用户所需要操作的数据,在数据库中该存储什么数据。
2)、处理要求:调查应用系统用户要求对数据进行什么样的处理,理清数据库中各种数据之间的关系。
3)、数据字典的整理。
4)、用E-R图画出表与表之间的关系。
5)、将建好的表进行数据流的测试。
二、E-R图补充
1、实体:用方框表示,方框内为实体的名称。
2、实体的各种属性:用椭圆表示,椭圆内为属性名称。使用线段将其和相应的实体连接起来。
3、实体之间的联系:用菱形表示,菱形内为联系的名称。
4、实体和实体之间的联系
1)、一对一:员工信息表和员工学历表是一对一关系。
2)、一对多:员工信息表和员工考勤表一对多关系。
3)、多对多:员工信息表和员工所报培训课程表是多对多关系。
mysql索引相关小常识:
一,经常被用来过滤记录的字段。
1. primary key 字段, 系统自动创建主键的索引;
2. unique key 字段,系统自动创建对应的索引;
3. foreign key 约束所定义的作为外键的字段;
4. 在查询中用来连接表的字段;
5. 经常用来作为排序(order by 的字段)基准的字段;
二. 索引会占用磁盘空间,创建不必要的索引只会形成浪费.
三. 索引的创建必须考虑数据的操作方式。
1.内容很少变动,经常被查询,为它多创建几个索引無所谓;
2.经常性,例行性变动的表而言,则需要谨慎地创建确实必要的索引;
四. primary key 和 unique key的区别
1. 作为Primary Key的域/域组不能为null。而Unique Key可以。
2. 在一个表中只能有一个Primary Key,而多个Unique Key可以同时存在。
更大的区别在逻辑设计上, Primary Key一般在逻辑设计中用作记录标识,这也是设置
Primary Key的本来用意, 而Unique Key只是为了保证域/域组的唯一性。
五.复合索引和单一索引
复合索引是指多字段联合索引,查询时经常需要这几个字段组合一起为条件再查询
唯一索引主要是用主键ID索引,存储结构顺序与物理结构一致
如:create index idx on tbl(a,b)
先按a排序, a相同的按b排序,所以当你查a或ab的时候,
能够利用到这个索引.但当你只查b的时候,索引对你的帮助不大.可能可以跳跃查找.
添加和删除索引的情况:
1、表的主键、外键必须有索引;
2、数据量超过300w的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
8、频繁进行数据操作的表,不要建立太多的索引;
9、删除无用的索引,避免对执行计划造成负面影响;
简单数据库设计实例
一个曾经做过的简单的管理系统中数据库设计的例子,包括设计表、ER图、建模、脚本.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
项目信息
Project Name: Book Manager System
DB: MySQL5.5
DB Name: db_library
Tables:
1). tb_book_info
2). tb_user
3). tb_admin_info
4). tb_borrow_return
5). tb_book_type
表设计
E-R图
PowerDesigner建模
脚本
C:\Program Files\MySQL\MySQL Server5.5\bin>mysql -u root -pabcd<c:\admin.sql
NOTE:
1.MySQL/bin目录,执行mysql -u root -pabcd <c:\admin.sql
2.练习用的数据库名:library 项目中数据库为db_library
/*==============================================================*/
/* Table: tb_admin_info 负责管理员登陆的表 */
/*==============================================================*/
drop database if exists library; # 练习用的数据库,如果存在则删除。
create database library; # 创建数据库。
use library; # 打开数据库,注意用分号。
create tabletb_admin_info # 建练习用表。
(
admin_id int(3) auto_increment not null primary key, # 主键,非空,自增长。
admin_user varchar(15) not null,
admin_pwd varchar(15) not null
);
insert into tb_admin_infovalues('001','Tom','Jerry'); # 插入两条数据,用于做测试。
insert into tb_admin_infovalues('002','root','root'); # 插入两条数据,用于做测试。
数据库设计(二)——简单设计实例相关推荐
- 数据库结构的简单设计
为什么需要设计数据库 这里我们思考两个问题: 修建茅屋需要设计吗?修建大厦需要设计吗? 结论是:当数据库比较复杂(如数据量大,表较多,业务关系复杂)时,我们需要先设计数据库: 因为,良好 ...
- mysql 分库 框架_数据库水平分库框架设计
1水平分库 最近在做一个IM系统,之前的旧系统没有考虑到用户量会增长得这么庞大,导致现在数据库性能瓶颈非常严重,迫切需要分库,用于减少每个库的用户数量,进而分摊负载,最终达到数据库横向扩展的目的. 数 ...
- 代码的简单设计五原则
欢欢:"你看我的代码用了策略模式和状态模式,假如后面客户会有这样的需求,可以无缝扩展,多么健壮!" 清扬一脸狐疑,心中念叨了数遍 :"哼,过度设计!",只见她欲 ...
- (转载)简洁、明晰!数据库设计三大范式应用实例剖析
(转载http://bbs.database.ccidnet.com/read.php?tid=325895) 简洁.明晰!数据库设计三大范式应用实例剖析 引言OL~eR{q ;iC,$vZ 0} ...
- 聊聊高并发(二)结合实例说说线程封闭和背后的设计思想
高并发问题抛去架构层面的问题,落实到代码层面就是多线程的问题.多线程的问题主要是线程安全的问题(其他还有活跃性问题,性能问题等). 那什么是线程安全?下面这个定义来自<Java并发编程实战> ...
- 如何设计一个简单的KV数据库
下面的内容仅供设计一个简单的KV数据库.如果想要实现一个功能更强的KV数据库的话,还需要考虑:更加丰富的数据类型.数据压缩.过期机制.数据淘汰策略.集群化.高可用等功能,另外还可以增加统计模块.通知模 ...
- 权限管理系统数据库设计的简单构思
最近在工作中接触到权限管理的设计,于是,自己在网上查阅了部分资料,再加上自己的一些思考,构思了一个简单的权限管理系统的数据库设计. RBAC与Tag 说到权限管理,一般都会想到基于角色的访问控制(Ro ...
- 编译原理 实验二 简单计算器的设计与实现
实验二 简单计算器的设计与实现 一.实验目的 综合运行词法分析器.语法分析器等原理实现一个具有加.乘功能的简单计算器,该计算器满足乘法优先级高于加法优先级,且仅处理非负整数. 二.实验内容 ...
- 数据库的简单设计与使用(编辑工具:Power Designer)
@一贤不穿小鞋(!<数据库的简单设计与使用>) 编辑工具:Power Designer 1.新建Model: file ==> new Model ==> 选择Model Ty ...
- 随便想到,群聊天的数据库简单设计
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/52926687 未经博主允许不得转载. 博主地址是:http://blog.csd ...
最新文章
- Spring MVC 全局异常处理(1) --SimpleMappingExceptionResolver
- 返回1到n的所有组合python_如何在Python中生成0-1矩阵的所有可能组合?
- java neo4j_java连接neo4j
- oh,我的老伙计,你看看这近五十个dapr视频
- 【知了堂学习笔记】MySQL数据库常用的SQL语句整理
- 10款交互设计原型开发工具(转)
- python判断语句的复杂度_Python内置方法的时间复杂度(转)
- idea安装Translation翻译插件
- 8位并行左移串行转换电路_74ls194串行数据到并行数据的转换
- Linux系统下智能DNS服务器BIND9.7.2安装配置
- 4. Layout overview
- windows7和windows10下安装xgboost
- 算法与数据结构——有序表(Java)(b站左程云课程笔记总结)
- Serial Scope——基于QCustomPlot的串口虚拟示波器开发过程
- 新手iso系统怎么安装 新手安装iso镜像文件详细步骤
- 大调查:2018中国程序员真实薪资曝光,看看你达到平均水平了吗?
- 京东android面试题2019,2019京东的面试题(牛客)
- ZZULIOJ:1053: 正弦函数
- mstsc登录xubuntu16.04
- 机器学习与分布式机器学习_机器学习治疗抑郁症
热门文章
- 计算机java二级_关于Java计算机二级考试内容。
- kmz转换为dwg_怎么将CAD图纸两种基本格式DWG与DXF进行互转?
- php教程 网易,网易开源镜像使用帮助
- [双十二优惠大放送] 我是小册姐,我因掘金小册而被创造,谢谢你们20天的陪伴...
- Html学习手册(W3CSchool.chm)
- 51单片机c语言呼吸灯程序,给你的51单片机作品加个呼吸灯(程序)
- 错别字检测的软件有哪些?自动检查错别字的工具 文字校对 文本纠错 查错别字 校对软件 错别字检查 论文格式 在线校对
- modbus通讯失败_你以为你真的了解Modbus 通信协议?
- OC中ACES流程色差问题解决方法!
- isis软件添加源代码c语言,ProteusISIS和Keil软件入门学习..doc