数据库表设计 基本思路[通俗易懂]

数据库表设计 基本思路[通俗易懂]好的数据结构会影响速度。好的数据库表设计会影响数据库操作效率。特别是数据多的时候,如果表的结构不好的话操作的时候条件(where后的内容)会变的非常复杂。SQL是关系数据库中用到的一种语言。所以,为了简化SQL,表的关系(内部和外部)要尽量设计的合理。下面有几个可以参照的步骤:1)找出那个表要描述的东西;2)列出你想通过这个表得到的相关信息的列表;3)通过上面的信息列表,将信息

大家好,又见面了,我是你们的朋友全栈君。好的数据结构会影响速度。好的数据库表设计会影响数据库操作效率。特别是数据多的时候,如果表的结构不好的话操作的时候条件(where后的内容)会变的非常复杂。
SQL是关系数据库中用到的一种语言。所以,为了简化SQL,表的关系(内部和外部)要尽量设计的合理。
下面有几个可以参照的步骤:
1)找出那个表要描述的东西;
2)列出你想通过这个表得到的相关信息的列表;
3)通过上面的信息列表,将信息划分成一块块小的部分,通过此小块来建表;
比如说:
现在需求是:
1)我需要一个表来管理我的朋友的个人信息;
2)我想要的是:通过名字查到某人的地址,生日和邮箱;
3)将上面的信息划分成一块块分别对应表里的一个字段,所以表可以如下:
姓名 

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

字段的原子化是指一个字段里不要包括多个同类型的值;如:
name         interests
jim 
          fishing,football
lilei 
        walking,book

表的原子化是指一个表里不要包括几个储存同类型值的字段;如:
teacher       student1        student2       student3
lucy 
         hanmeimei       poli           lily
jack 
         rose            mary           simon

这里的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;因为一个人可以对应多个邮箱,但一个邮箱只能属于一个人(他自己要共用木有办法)

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

 user_id  user_name
 1  张三
 2  李四
 3  王五

 user_id  produc_id
 1  1
 1  3
2  2
2
3
3
1
3
2
3
3
 produc_id  produc_name
 1  LiNing
 2  Nike
 3  Adidas


另外,同一个表里的各字段之间不要有复杂的依赖关系.各字段只能和主键有依赖关系.如果非主键和非主键间有依赖关系,就要将它们从主表分离出去,放在另一个表中,并通过外键进行关联

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151577.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JavaScript对象

    JavaScript对象

    2021年11月29日
  • 物联网网络架构_物联网技术有哪些

    物联网网络架构_物联网技术有哪些系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章Python机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例

  • 搭建谷歌云

    搭建谷歌云GoogleCloud不需要任何money的,但是你需要你一张visa的信用卡,因为Google会验证账户的真实性,先从账户扣除1美元,过一会儿就会退回来的(一般5分钟左右)注意,搭建GoogleCloud的过程中,也是需要处于不被和谐的环境下的,至于如何获取Google账号,这里不做过多介绍。首先打开谷歌云,有账号就直接登录,没有就按照页面提示注册…

  • 用友企业互联网化新阶段:软件、云服务、金融

    用友企业互联网化新阶段:软件、云服务、金融

  • 什么是Promise,Promise的三种状态[通俗易懂]

    什么是Promise,Promise的三种状态[通俗易懂]什么是Promise对象:Js中进行异步编程的新的解决方案(传统的解决方案——回调函数和事件),用于表示一个异步操作的最终完成(或失败),及其结果值.。 语法上:promise是一个构造函数 简单来说,promise对象用来封装一个异步操作并可以获取其结果语法:newPromise(function(resolve,reject){…}/*e…

  • MVC3和MVC4中CRUD操作

    MVC3和MVC4中CRUD操作

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号