数据库设计入门

数据库是网络应用的基础,良好的表结构设计,对整个应用起着至关重要的作用。

数据库设计的步骤: 1.需求分析:数据是什么,有哪些属性,数据和属性的特点 2.逻辑设计:使用ER图对数据库进行逻辑建模 3.物理设计:选择数据库系统,并对逻辑设计进行转化 4.维护优化:追加,分拆等

实例演示(电子商务网站)

一、需求分析:

用户模块:用于登录和保存用户信息等 属性(用户名、密码、手机、邮箱、身份证、地址、姓名。。。) 唯一标识(用户名、身份证、手机) 存储特点(永久)

商品模块:用于记录网站中销售的商品信息 属性(编码、名称、描述、分类、供应商、价格。。。)  唯一标识(编码、名称+供应商)  存储特点(不在销售商品可归档)

订单模块:用于用户订购商品的信息 属性(订单号、收件人、电话、地址、商品名称与数量、订单状态、支付状态)  唯一标识(订单号) 存储特点(分表分库)

购物车模块:用于保存用户购物时选的商品 属性(编号、用户名、商品编号名称数量价格、加入时间)  唯一标识(购物车编号) 存储特点(不用永久,可定时归档与清理)

供应商模块:用于保存所销售商品的供应商信息 属性(编号、名称、联系人、营业执照号)  唯一标识(编号、营业执照号)  存储特点(永久)

二、逻辑设计:

ER图:矩形(实体);菱形(联系集);椭圆(属性【下划线为主键】);线段(连接) 联系集主要用来将多对多关系转换为一对多(即建立一张关系表)

数据库设计范式:

第一范式:每一列属性都是不可分割的原子数据项(即每个属性不能再分)。 案例:将地址分为省份、城市、区县、详细(街道门牌),四个不可分割部分。

第二范式:要求实体的属性完全依赖于主关键字(即为每个实体建立唯一主键来区分)。 案例:学生信息表中,学号+课程→成绩,成绩无法完全依赖于主键学号。

第三范式:在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖,减少数据冗余) 案例:员工信息表中,添加部门编号后,不可再添加部门名称简介等依赖部门编号的属性。

BC范式:在3NF基础上,任何非主属性不能对主键子集依赖(在3NF基础上消除对主码子集的依赖)

三、物理设计

1、选择合适的数据库系统

2、定义数据库、表及字段的命名规范

3、根据数据库系统设置字段类型(优先数字类型,其次日期和二进制,最后字符串)

4、反范式化设计(方便查询,提高效率)

列类型

存储空间

TINYINT

1字节

SMALLINT

2字节

MEDIUMINT

3字节

INT

4字节

BINGINT

8字节

DATE

3字节

DARETIME

8字节

TIMESTAMP

4字节

CHAR(M)

M字节,1<=M<=255

VARCHAR(M)

L+1字节,L<M&&1<=M<=255

四、维护优化

1、维护数据字典

2、维护索引

3、维护的表结构

4、表的拆分(垂直、水平)

垂直拆分原则:将常用的字段与不常用的字段依据id主键拆分为两个或多个表,减少表的宽度

水平拆分原则:将历史或过期数据水平拆分成多个表,减少表的长度

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏美图数据技术团队

一览美图数据开发与SQL解析

感谢阅读「美图数据技术团队」的第 16 篇原创文章,关注我们持续获取美图最新数据技术动态。

542
来自专栏腾讯Bugly的专栏

内存泄露从入门到精通三部曲之排查方法篇

1 最原始的内存泄露测试 重复多次操作关键的可疑的路径,从内存监控工具中观察内存曲线,是否存在不断上升的趋势且不会在程序返回时明显回落。 这种方式可以发现最基本...

35814
来自专栏SDNLAB

深度数据包检测DPI开发解析

深度数据包检测(DPI) 深度数据包检测(Deep packet inspection,缩写为 DPI)是一种特殊的网络技术,一般网络设备只会查看以太网头部、I...

3177
来自专栏软件测试经验与教训

使用Excel批量生成SQL脚本

我以为生活是猫吃鱼,狗吃肉,奥特曼打小怪兽。现实确是鼠整猫,羊耍狼,俩熊玩死光头强!这个世界这么疯狂,让我们如何坚强!

1002
来自专栏美团技术团队

Android动态日志系统Holmes

背景 美团点评公司是全球领先的一站式生活服务平台,为6亿多消费者和超过450万优质商户提供连接线上线下的电子商务网络。美团点评的业务覆盖了超过200个丰富品类和...

40510
来自专栏鸿的学习笔记

《csapp》的学习笔记(一)

刚开始程序员通过编辑器创建并保存了一个文本文件,hello.c。这个实际上是由值0和1组成的位序列,8位为一个字节。系统中的所有信息都是由一串比特组成。区分不同...

731
来自专栏DannyHoo的专栏

iOS开发中内存泄漏检测工具--MLeaksFinder

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

582
来自专栏喔家ArchiSelf

MCU上的代码执行时间

在许多实时应用程序中,二八原则并不生效,CPU 可以花费95%(或更多)的时间在不到5% 的代码上。电动机控制、引擎控制、无线通信以及其他许多对时间敏感的应用程...

632
来自专栏孔德雨的专栏

MongoDB Mmap 引擎分析

在3.0之前一直使用mmap引擎作为默认存储引擎,本篇从源码角度对mmap引擎作分析,业界一直以来对10gen用mmap实现存储引擎褒贬不一,本文对此不作探讨。

9.1K0
来自专栏皮振伟的专栏

[linux][memory]KSM技术分析

前言: 先来回顾一下Linux平台上的节约内存的方案: swap:通过LRU淘汰掉掉一部分page,把这些page交换到磁盘上。再次访问到这些page的时候,k...

3588

扫描关注云+社区