范式

数据库的设计

﹥>﹥吖頭↗ 提交于 2020-03-03 17:03:40
一、数据库的设计 良好的数据库: 1.节省存储空间 2.保证数据完整性 糟糕的数据库 1.数据冗余,存储空间的浪费 2.产生数据不完整 设计数据库的步骤 1.充分了解需求 (分析实体) 2.标识实体: 具体存在的对象,(名词大多为实体) 3.标识属性 4.标识关系 如何将E_R图(实体关系图)转成表 1.将实体转成表,将属性转成字段 2.如果找不到一个合适的字段做主键,我们就添加一个自动增长列作为主键 3.建立正确的关系 数据规范化(三范式) 表设计出来以后,并不是最合理的结构,我们需要对表进行规范化(我 们通过3范式来对表进行规范) 先满足第一范式------>再满足第二范式-------->第三范式 1.确保每列的原子性(第一范式) 第一范式用来规范化所有的字段,字段不可再分。 注意:比如地址这个字段,如果不分类汇总,不排序,仅仅是起一个字符串的作 用,这时我们不拆分。(反三范式) 2.非键字段必须依赖与键字段(第二范式) 要求一个表只描述一件事情 3.消除传递依赖(第三范式) 在非主键字段中,如果一个字段可以推导出 另一个字段,这叫传递依赖 反三方式: 范式越高。数据冗余就越少,但是有时候效率就越地下, 为了提高运行效率,可以适当的让数据冗余。 数据库的性能比规范化更重要 来源: CSDN 作者: qq_43382364 链接: https://blog.csdn.net

数据库设计那些事儿

我是研究僧i 提交于 2020-03-03 08:12:27
目的: 有效的存储,高效的访问。 优良的设计特点 1.减少数据冗余 2.避免数据异常 3.节约存储空间 4.高效的数据访问 数据库设计步骤 1.需求分析 2.逻辑设计ER建模 3.物理设计(Mysql、Oracle、Sql server) 4.维护优化(新需求建表、索引优化、大表拆分) 需求分析 搞清楚实体与实体之间的关系? 实体包含哪些属性? 实体的唯一标识是什么? 对于日志类的实体,可以进行分库分表设计,定期归档。 电商实例, 用户模块、商品模块、订单模块、购物车模块、供应商模块。 用户模块,包含属性:用户名、密码、电话、邮箱、身份证号、地址、姓名、昵称... 可选唯一标识,用户名、身份证、电话、邮箱。 存储特点,随系统上线逐渐增加,需要永久存储。 商品模块,包含属性:商品编码、商品名称、商品描述、商品分类、供应商名称、价格 可选唯一标识(商品编码)、(商品名称、供应商名称) 存储特点:对于下线商品可以归档存储(不要删除)。 订单模块,包括属性:订单号、用户姓名、电话、收货地址、商品编号、商品名称、数量、价格、订单状态、支付状态、订单类型... 可用唯一标识,订单号。 存储特点:永久存储(分库分表) 购物车模块,包括属性:用户名、商品编号、商品名称、商品价格,商品分类,加入时间,商品数量... 可选唯一标识:(用户名、商品编号、加入时间)、(购物车编号) 存储特点:不用永久存储

教务系统--数据库设计

北慕城南 提交于 2020-03-03 08:10:32
做完教务系统的需求分析 , 接下来就是对数据库的设计 . 数据库设计是 web 开发中特别重要的一个环节 , 好的数据库设计不仅能让我们实现软件时得心应手 . 对后期的维护 , 升级也是至关重要的 . 记得牛腩在新闻发布系统中这样说过 , 数据库设计完成了 , 那么这个软件也就完成了 70% 的工作 . 可见其重要性 . 对数据库的设计 , 主要是依赖界面设计来做的 . 界面反映了用户的直接需求 . 把这些需求转换成数据库中的表 . 再为这些表添加主键 , 外键等约束 . 以确保数据关系的合理性 . 然后再根据业务的流程去梳理数据库数据的流向是否得当 . 在这里我解释一下自己做数据库设计的一些思路和体会 . 对数据库字段的确定 , 主要是依赖界面中需要添加那些信息 , 需要处理那些信息 , 将对应信息分类到相应的表中 . 这里不说如何确定和提取字段了 , 因为自己感觉也说不清楚 , 当你见得数据库多了 , 你就会自然而然的把他们分出来 . 这里主要说一下对数据库三范式的理解和应用 . 第一范式:数据库表中的字段都是单一属性的,不可再分 对于第一范式 , 还是比较好理解的 , 说白了就是说一个列不能有多个值 , 每一个字段都是不可拆分的 . 比如数据库有这样一个字段 : 父母 . 显然这是不行的 . 因为父母属于两个独立的个体 , 完全可以拆分 . 如果把他们设置为一个字段 .

MySQL基础部分总结

心已入冬 提交于 2020-03-01 02:22:39
MySQL是一种关系型数据库管理系统 数据库操作 创建数据库:create database 数据库名; 显示已经存在的数据库:show databases; 删除数据库:drop database 数据库名; (删除数据库会删除数据库中所有的表和表中所有的数据) (数据库引擎) 查看数据库支持的引擎: 1.show engines; 2.show variables like ‘have%’; 查看数据库默认引擎:show variables like ‘storage_engine’; 如果想要更改默认引擎,可以在my.ini中更改。 表操作 创建表: 查看表的结构: describe 表名; desc 表名; 查看表详细结构语句: show create table 表名 \G; (加上\G,显示结果更加美观,尤其适用于内容比较长的记录) 修改表名:alter table 旧表名 rename [to] 新表名; 修改字段的数据类型:alter table 表名 modify 属性名 数据类型; 修改字段名:alter table 表名 change 旧表名 新属性名 新数据类型; 增加字段:alter table 表名 add 属性名1 数据类型 [完整性约束] [first | after 属性名2]; 删除字段:alter table 表名 drop 属性名;

数据库的三范式是什么?

北慕城南 提交于 2020-02-28 15:24:12
第一范式:强调的是列的原子性,就是列不能够再分成其他几列; 第二范式:一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖主键的一部分; 第三范式:任何非主属性不依赖于其他非主属性。 来源: CSDN 作者: 能解决一切的答案 链接: https://blog.csdn.net/weixin_45022376/article/details/104551142

数据库设计范式

本秂侑毒 提交于 2020-02-28 10:53:59
数据库设计范式是一个很重要的概念,但是这个重要程度只是适合于参考。使用数据库设计范式,可以让数据表更好的进行数据的保存,因为在合理的设计,如果数据量一大也肯定会存在性能上的问题,所以在开发中,唯一可以称为设计的宝典——设计的时候尽量避免日后的程序出现多表关联查询。 第一范式 所谓的第一范式指的是数据表中的数据列不可再分。例如,现有如下一张表: CREATE TABLE member( mid NUMBER PRIMARY KEY, name VARCHAR2(200) NOT NULL, contact VARCHAR2(200) ) 这个时候设计的就不合理,因为联系方式由多种数据所组成(电话、地址、email、手机、邮政编码等),所以这种设计是不符合第一范式的,现在可以修改设计如下: CREATE TABLE member( mid NUMBER PRIMARY KEY, name VARCHAR2(200) NOT NULL, address VARCHAR2(200), zipcode VARCHAR2(6), mobile VARCHAR2(20), tel VARCHAR2(20) ) 但是在这里有两点需要说明。 1、关于姓名,在国外的表设计姓名也分为姓和名两类,但是在中国就是姓名保存。 2、关于生日,生日有专门的数据类型(DATE),所以不能将其设置为生日年、生日月

数据库设计三大范式和五大约束

自闭症网瘾萝莉.ら 提交于 2020-02-28 06:50:01
来源: https://www.cnblogs.com/zhouguowei/p/9268788.html 一、三大范式: 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法,以下就是对这三个范式的基本介绍: 第一范式(1NF): 1、数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。 如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。 2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。 显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。 第二范式(2NF): 满足1NF后要求表中的所有列,每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。 一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把他拆开来。

数据库完美总结(一)

旧街凉风 提交于 2020-02-23 03:39:34
数据库大体可以分为: 基于标准的SQL的 关系型数据库 :Oracle、MySQL、SQL Server 不基于SQL实现的 非关系型数据库 :键值对【memcached、redis】;文档型【 mongodb】; 数据库基本语法(大写均为关键字,不可缺少): 1)登录本地数据库: MYSQL -U 'username' -P 'password' ; 2)显示当前的数据库: SHOW DATABASES ; 3)创建数据库: CREATE DATABASE IF NOT EXISTS db_test CHARACTER SET utf8mb4; 4)使用/删除数据库: USE/DROP DATABASE db-name; 5)查看/创建表: DESC/CREATE TABLE table_name; 【基本】增删改查CRUD :Create, Retrieve,Update,Delete 1)多行数据 + 指定列插入: INSERT INTO table_student (id, sn, name) VALUES (?,?,?); 2)删除:-- 删除孙悟空同学的考试成绩 -------------- DELETE FROM exam_result WHERE name = '孙悟空'; -- 删除整张表数据 -------------- DROP TABLE IF EXISTS

Java EE入门(五)——MySQL基础 (多表关系、范式、多表查询、事务、DCL)

元气小坏坏 提交于 2020-02-19 12:13:21
Java EE入门(五)——MySQL基础 (多表关系、范式、多表查询、事务、DCL)   iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 1、多表关系 多表之间的关系: 一对一的关系。 一对多 或 多对一 的关系。 多对多的关系。 一对多关系实现:在多的一方建立外键列,指向一的一方的主键。 多对多关系实现:需要借助第三张中间表,中间表中至少包含两个字段,作为外键分别指向两张表的主键。这两个字段构成了联合主键。 一对一关系实现:在任意一方添加外键列,指向另一方的主键。而且需要在外键列添加唯一约束。 分析示例:用户收藏旅游线路。 三个实体:旅游线路分类、旅游线路、用户。 旅游线路分类和旅游线路是 一对多 的关系。 用户和收藏的旅游线路是 多对多 的关系。 实现: CREATE TABLE category( cid INT PRIMARY KEY AUTO_INCREMENT, cname VARCHAR(100) NOT NULL UNIQUE ); CREATE TABLE route( rid INT PRIMARY KEY AUTO_INCREMENT, rname VARCHAR(100) NOT NULL UNIQUE, CONSTRAINT r_c FOREIGN KEY (rid) REFERENCES category

高性能MySQL 第四章

拥有回忆 提交于 2020-02-16 22:03:23
MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。 不管存储哪种类型的数据,下面几个简单的原则都有助于做出更好的选择。 1、尽量避免过度设计,例如会导致极其复杂查询的schema设计,或者有很多列的表设计(很多的意思是介于有点多和非常多之间)。 2、使用小而简单的合适数据类型,除非真实数据模型中有确切的需要,否则应该尽可能地避免使用NULL值。 3、尽量使用相同的数据类型存储相似或相关的值,尤其是要在关联条件中使用的列。注意可变长字符串,其在临时表和排序时可能导致悲观的按最大长度分配内存。 4、尽量使用整型定义标识列。 5、避免使用MySQL已经遗弃的特性,例如指定浮点数的精度,或者整数的显示宽度。 6、小心使用ENUM和SET。虽然它们用起来很方便,但是不要滥用,否则有时候会变成陷阱。最好避免使用BIT。 范式及其优缺点 在范式化的数据库中,每个事实数据会出现并且只出现一次 优点: 范式化的更新操作通常比反范式话要快 当数据较好的范式化时,就只有很少或者没有重复数据,所以只需要修改更少的数据 范式化的表通常更小,可以更好地放在内存里,所以执行操作会更快 很少有多余的数据意味着检索列表数据时更少需要 DISTINCT 或者 GROUP BY 语句 缺点: 表需要关联 反范式及其优缺点 在范式化的数据库中,信息是冗余的,可能会存储在多个地方 优点: