好的数据结构会影响速度。好的数据库表设计会影响数据库操作效率。特别是数据多的时候,如果表的结构不好的话操作的时候条件(where后的内容)会变的非常复杂。

SQL是关系数据库中用到的一种语言。所以,为了简化SQL,表的关系(内部和外部)要尽量设计的合理。

下面有几个可以参照的步骤:

1)找出那个表要描述的东西;

2)列出你想通过这个表得到的相关信息的列表;

3)通过上面的信息列表,将信息划分成一块块小的部分,通过此小块来建表;

比如说:

现在需求是:

1)我需要一个表来管理我的朋友的个人信息;

2)我想要的是:通过名字查到某人的地址,生日和邮箱;

3)将上面的信息划分成一块块分别对应表里的一个字段,所以表可以如下:

姓名住址邮箱生日

但需求可能更细,比如说:生日我想精确到年,这样方便我查询每年里所有的朋友。这样就可以将生日再细分成年月日三个字段。甚至如果要细分的话,地址可以再分国国家,省,市等。当然,这就看你想通过表获得哪些数据,一切设计是为了方便数据库操作。在方便自己的前提下将数据表的字段设计成“原子化”(即不可再细分)。比如说,一个网上商店的数据表,什么路多少号对于它来说就是原子化的数据了,就不用再把什么街多少号分开做为两个字段来存储。但对于一个地产商来说,他希望可以通过街道名,号,等来查,所以地址分成几个字段会更好。

字段的原子化是指一个字段里不要包括多个同类型的值;如:

nameinterests

jimfishing,football

lileiwalking,book

表的原子化是指一个表里不要包括几个储存同类型值的字段;如:

teacherstudent1student2student3

lucyhanmeimeipolilily

jackrosemarysimon

这里的student1 student2 student3

就重复了。但上面这两种情况似乎只能选择其中一个,也就是说无法满足绝对的原子化,其实不然.我们可以把这些无法满足原子化的字段另外建一个表,让两个表关联起来.

更合理的表设计会给每条记录加上一个唯一的识别,就是加上主键。

1)将一个表字段设为主键要求在表创建的时候就进行设置。

2)

一个表里被设为主键的字段的值必须是唯一的,也就是说如果一个字段被设为主键,这个表所有的数据列表里这个字段的值不可能有重复的。

3) 被设为主键的字段不能插入空值。

4) 被设为主键的字段的值是不能更改的。

5)

如果字段被设为是自增长的,主键只能设置一个且它必须是主键。如果表中没有自增长的字段,则可以设多个字段为主键.

6) 主键最好是一个和表里数据无关的值。比如说另建一个字段:id;而不要设在:name

等这些字段上。

前面提到了两个表关联.两个表之间数据的关系有三种:

1)一对一;两个表里数据唯一对应;

2)一对多;表A在表B里对应多条数据,但表B里的一条数据绝对只对就A中的一条数据;

3)多对多;A里的一条数据对应B里的多条数据,B里一条数据也对应A中的多条数据.

一对一的表设计用的不多.可能用到的情况有:

a)对一个表中大多数时候不查的字段,放到另一个表中对应起来.这样可以提高大多数时候查询的效率;

b)若表中记录还有些字段的值未知,可以将这些字段分出来放.这样可以让主表中不存在NULL;

c)不想轻易就查出来的数据,比如一个人的工资详情,等.可以在主另一表中放着;

d)大文本,通过一个外键关联,这样可以提高查询效率;

一对多的情况可以如下:

有一个人员信息表info,里面包括一个外键:email;这个字段里存的是邮箱表emailBox里的主键:id;因为一个人可以对应多个邮箱,但一个邮箱只能属于一个人(他自己要共用木有办法)

多对多对优化表设计的用处最大,效果最显著;一个多对多的关系是由一个连接表有两个一对多的表关系组成的;查看下图:

mysql表设计原子性_数据库表设计-原子性相关推荐

  1. mysql三大范式 答案_数据库逻辑设计之三大范式通俗理解,一看就懂,书上说的太晦涩...

    一.第一范式 1NF是对属性的原子性,要求属性具有原子性,不可再分解:表:字段1. 字段2(字段2.1.字段2.2).字段3 ...... 如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可 ...

  2. mysql 字段名称规范_数据库表及字段命名规范

    数据库设计表及字段命名规范(我整理的,望大家多多提建议) 1.数据库表命名规范: (1)表名前应该加上前缀,表的前缀一个用系统或模块的英文名称缩写,前缀全部大写或首字母大写,表名中包含的单词首字母大写 ...

  3. java mysql 表关系分析_数据库表的关系

    表与表之间一般存在三种关系,即一对一,一对多,多对多关系. 下面分别就三种关系讲解数据库相关设计的思路和思考过程: (1)一对一关系 例如,下面的一张表,保存了人的相关信息,有男有女,要求查处所有的夫 ...

  4. mysql库表散列_数据库表--hash clustered table

    Hash clustered table与索引聚簇表非常相似,只有一个主要区别:聚簇键索引被一个hash函数所取代,表中的数据就是索引.所以没有物理索引 hash clustered table也有副 ...

  5. mysql 表名 复数_数据库表命名,复数或单数

    这个问题要求进行宗教战争. 我无疑应该是复数,因为- >表是行的集合. > sql语法变得更加自然 – SELECT * FROM Customers而不是SELECT * FROM Cu ...

  6. mysql 表名 复数_数据库表名,应该用复数还是单数

    用单数形式更佳,理由如下: 1.概念直观. 你有一个袋子,里面有好多个苹果,你会说这是个苹果袋.但无论里面有0,1,百万个苹果,它依然是个袋子.表也是如此,表明需要描述清楚,表里面包含的对象,而非有多 ...

  7. mysql表增加一行_数据库表增加一行数据

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. mysql实验总结范文_数据库课程设计实验报告范例1

    3) B + 树的删除: 如果我们要删除一个具有给定键K的记录,必须先定位该记录和它在B + 树叶结点中的键-指针对.然后我们删除记录本身并从B + 树种删除它的键-指针对. 如果发生删除的B + 树 ...

  9. 如何设计一张数据库表

    如何设计一张数据库表 1.前言 ​  如何设计一张数据库表,或者说设计一张数据库表需要注意些什么,这是我最近在思考的问题,刚开始,我简单的罗列了一下注意事项: 设置合理的主键: 根据字段更改的频率程度 ...

最新文章

  1. PHP中把stdClass Object转array的几个方法
  2. 材料成型计算机模拟第三版,材料成型计算机模拟考试复习资料.doc
  3. 一条SQL语句实现二进制到十进制的转换
  4. XML Json
  5. 计算机视觉与深度学习 | 像素坐标转相机坐标转世界坐标,求R,t(附C++和Python源代码)
  6. Linux 之七 SSH、SSL、OpenSSH、OpenSSL、LibreSSL
  7. java ref 应用类型_Java四种引用类型
  8. 数据挖掘肿瘤预测_Nature Medicine封面文章:利用单核细胞数量预测及评估肿瘤免疫治疗效果...
  9. Flutter进阶—质感设计之表单输入
  10. android mtk平台,android mtk平台默认输入法
  11. openresty的html文件夹在,Openresty 配置访问静态文件,拆分路径
  12. shell编程学习笔记之特殊变量($0、$1、$2、 $?、 $# 、$@、 $*)
  13. MODIS16天数据月合成/季合成
  14. 乔治亚大学招收计算机视觉/深度学习/机器人/自动驾驶博士生from 2023 spring
  15. oracle范围分区合并,ORACLE 范围分区 partition-range分区
  16. 尚硅谷Linux网络服务基础
  17. php代码自动生成文档-phpDocumentor
  18. oracle存储过程入门教程
  19. 内存管理单元(MMU)介绍
  20. ps aux|grep xxx详解

热门文章

  1. 阿里云+作业帮+小红书:论剑云原生时代的 SRE与智能运维
  2. Ubuntu IP地址设置
  3. Firefox(火狐)主页被hao123绑架的解决办法
  4. Ubuntu系统,安装完成却黑屏???不要慌!只需这个命令,一下搞定!
  5. 1.编程实现“油耗计算机程序”。要求:输入加油金额、公里数、汽油价格,单击“计算”按钮,显示百公里油耗。界面如图:
  6. 宝塔面板环境80端口被占用如何解决
  7. java jxl api_JXl常见API说明
  8. 《大数据技术原理与应用》期末考点整合
  9. dell服务电话(dell400客服电话)
  10. 华为鸿蒙vogtloop30pro价格,最万众瞩目鸿蒙和华为Mate40 Pro,华为Mate30跌至白菜价让路...