数据库规范——学习小记

数据库规范——学习小记

之前在学习后端开发的时候,在数据库这一块,有关建表与查询效率等方面一直存有疑问,但因为做的项目都很小,不太需要考虑效率与规范,所以想着能实现功能就行。因此最近打算深入了解一些建表的规范以及如何提高查询效率。

表设计规范

命名规范的话,之前倒是都有注意,大致总结为以下几点:

表命名

  • 表名前应该加上前缀,表的前缀一个用系统或模块的英文名称缩写,然后驼峰式命名
  • 表名应该有意义,易于理解,最好使用可以表达功能的英文单词或缩写,如果用英文单词表示,建议使用完整的英文单词
  • 表名最好不要超过3个英文单词长度
  • 在数据库表命名时应该用英文单词的单数形式
  • 如果是后台表命名时应该在表名基础上加上后缀_b(这个之前倒是没有注意过
  • 在表创建完成前,应该为表添加表的注释。

表字段命名:

  • 数据库表字段应该是有意义而且易于理解的,最好是能够表达字段含义的英文字母
  • 系统中所有属于内码,即仅用于标识唯一性和程序内部用到的标识性字段,字段名称建议取为 ID ,采用类型为整型或长整型.
  • 系统中属于是业务内的编号字段,代表一定业务信息,建议字段命名为code , 如工作单编号wf_code .(这个之前好像比较少了解,学习了
  • 不要在数据库表字段中包含数据类型,如:datetime
  • 不要在数据库表字段命名时重复表名,可以使用表名首字母(不包含数据库表名前缀)

PS:在数据库表字段命名时;不建议使用数据库关键字,如:name,time ,datetime password 等

表设计规范

  • 除了timestamp、datetime、image等类型之外,数据类型应该有默认值,如字符型为一个空字符,数值型为0,逻辑型为0,这也是我之前没有注意过的细节
  • 字段的设计上尽量符合三大范式(下文会提到)

表索引

这一块我之前很少了解,这里着重总结一下。参考了深入浅出数据库索引原理这篇博客,讲的比较形象。

如何创建索引

创建索引是很简单的,有如下语法

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON table_name (index_col_name,...)

如果不指定索引类型,则默认是普通索引。[]内为可选项。以及删除索引的操作如下

DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name

上下两条语句是等价的。

何时使用索引

添加索引的目的是为了提高查询效率,但并不是无脑添加的,不恰当的添加索引还可能降低效率。在这方面参考了这篇博客Mysql创建索引。简单来说,添加索引有以下一些建议:对常用于条件查询的字段,查询中排序的字段,查询中与其他表关联的字段添加索引。对于记录数较少的表,需要频繁插入、更改的表不建议建立索引。因为索引本身也要占据空间,以及每次修改操作需要修改索引,有一定时间开销。

数据库的三大范式

这个地方参考了数据库的三大范式和五大约束数据库设计三大范式等博客文章

  • 第一范式(1NF):数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。
  • 第二范式(2NF):满足1NF后要求表中的所有列,都必需依赖于主键,而不能有 任何一列与主键没有关系(一个表只描述一件事情)。否则就需要拆成两张表。
  • 第三范式(3NF):满足2NF后,要求:表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键)。这里可能不太好理解,举个例子:订单表中需要有客户相关信息,在分离出客户表之后,订单表中只需要有一个用户ID即可,而不能有其他的客户信息,因为其他的用户信息是直接关联于用户ID,而不是关联于订单ID。

以上的定义讲的比较书面,简单地可以这样总结:

①第1范式:每个表中列都是不可拆分的最小单元

②第2范式:一张表只描述一件事情,即所有列都与主键有关

③第3范式:用外键做表的关联,除此之外不要储存其他表的信息

原则上数据库的设计要遵守以上三大范式,但这只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

总结收获

比较针对地对数据库的使用进行了一次粗略学习,了解了一些数据库的规范和特点。不过对于目前而言,在项目用户量较小的情况下,这些用于提高效率或减少冗余的知识可能用处不大,但尽早了解总是有益的。

原文地址:https://www.cnblogs.com/orangee/p/9750716.html

时间: 2024-10-13 10:48:14

数据库规范——学习小记的相关文章

linux学习小记 (一 )

shell 学习小记: 注意:多看系统脚本  多模仿    su切换用户时需要输入目标用户密码,root(superuser)切换到任何用户都不需要输入密码,- 参数必须要是最后一个(su huhu -) sudo需要输入当前用户密码,拥有sudo特权的用户可以执行 "sudo su -"命令,使用自己的密码切换到root用户 , 所以应该在/etc/sudoers 文件中禁止 sudo 执行su命令 linux文件与颜色: /etc/DIR_COLORS   (命令dircolors

git 学习小记之记住https方式推送密码

昨天刚刚学了点git基础操作,但是不幸的是[email protected]给出公告说尽量使用 https 进行操作.可是在用 https 进行 push 时,都需要输入帐号和密码. 各种百度谷歌之后在[email protected]官网找到了解决方法<https方式使用[email protected]设置密码的方式>文中给出了几个方法,并且都非常简单. 关于 cache 缓存方式,我不太喜欢,因为要设置时间,而且会过期.而 store 相应的非常方便,设置全局后,方便多个库使用.当然如果

数据库语句学习

1.查询语句 (1)select 列名, 列名, ... from 表名 例:setect * from 表名 获取表格中所有内容 (2)select distinct 列名, 列名, ... from 表名 //获取某列唯一不同的值 (3)select 列名 from 表名 where 列 运算符 值 //值如果是文本格式,使用 ' ',运算符中不等于为 <> and 和 or 用在where 语句中,把多个条件集合起来 order by 列名 DESC/ASC //对结果集进行排序 DES

TimesTen 应用层数据库缓存学习:12. 管理缓存环境

缓存和复制代理的启停和状态查看 cache agent的作用是将监控Oracle中数据的变化,并更新到TimesTen.因此,对于只读和AWT缓存组,cache agent都是必需的. cache agent的启停 ttisql> call ttcachestart ttisql> call ttcachestop 或者 $ ttadmin -cachestart DSN $ ttadmin -cachestop DSN replication agent的启停 ttisql> call

linux下mysql数据库的学习

转载博客:http://freedomljtt.blog.163.com/blog/static/72294949201210145441701/ ubuntu12.04 卸载和安装mysql 卸载mysql 第一步 1 sudo apt-get autoremove --purge mysql-server-5.0 2 sudo apt-get remove mysql-server 3 sudo apt-get autoremove mysql-server 4 sudo apt-get r

数据库文件组小记

1) 如何将一个数据表从A 文件组移动到 B文件组中 --要点:只需将聚集索引建立在需要移动的数据组中,数据页面也会随之移动到对应的文件组中 --创建数据表 CREATE TABLE tb(id INT ,cname NVARCHAR(4000)) ON [FG_A] GO --INSERT DATA INSERT INTO [dbo].[tb] SELECT 1,'aaaaaaa' --创建聚集索引(必须是聚集索引) CREATE CLUSTERED INDEX PK_ID ON [dbo].

MariaDb数据库管理系统学习(一)安装过程图解

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险. MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品.在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB. MariaDB由MySQL的创始人Michael Widenius(英语:Michael Wid

MariaDb数据库管理系统学习(二)使用HeidiSQL数据库图形化界面管理工具

HeidiSQL 是一款用于简单化的 MySQL 服务器和数据库管理的图形化界面.该软件允许你浏览你的数据库,管理表,浏览和编辑记录,管理用户权限等等.此外,你可以从文本文件导入数据,运行 SQL查询,在两个数据库之间同步表以及导出选择的表到其它数据库或者 SQL 脚本当中.HeidiSQL 提供了一个用于在数据库浏览之间切换 SQL 查询和标签带有语法突出显示的简单易用的界面.其它功能包括BLOB 和 MEMO 编辑,大型 SQL 脚本支持,用户进程管理等.该软件资源开放. MariaDB安装

TimesTen 应用层数据库缓存学习:17. 全局数据缓存(cache grid)的高可用性

概述 本文有两个目的: 1. 介绍TimesTen Global Cache Grid的高可用性 2. 给出了一个简单的建立和清理Global Cache Grid的过程,前面已经有一篇文章: TimesTen 应用层数据库缓存学习:13. 全局数据缓存(cache grid),但那个Cache Group太复杂 建立一个简单的Global Cache Grid 首先建立两个TimesTen instance,一个为tt1122, 一个为ttnew. 之所以建立两个实例,是为了停instance