广告
返回顶部
首页 > 资讯 > 数据库 >数据库正规化和设计的方法有哪些
  • 749
分享到

数据库正规化和设计的方法有哪些

2024-04-02 19:04:59 749人浏览 薄情痞子
摘要

本篇内容介绍了“数据库正规化和设计的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

本篇内容介绍了“数据库正规化和设计的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在动态网站的设计中,数据库设计的重要性不言而喻。如果设计不当,查询起来就非常吃力,程序的性能也会受到影响。无论你使用的是Mysql或者oracle数据库,通过进行正规化的表格设计,可以令你的PHP代码更具可读性,更容易扩展,从而也会提升应用的性能。 
  简单说来,正规化就是在表格设计时,消除冗余性和不协调的从属关系。在本文中,我将通过五个渐进的过程来告诉你在设计中应该了解的正规化技巧。从而建立一个可行而且效率高的数据库。本文也会详细分析一下可以利用的关系类型。 

  这里假定我们要建立一个用户信息的表格,其中要存储用户的名字、公司、公司地址和一些个人的收藏夹或url。在开始时,你可能定义一个如下的表格结构: 

零状态形式 

users 
name company company_address url1 url2 
Joe ABC 1 Work Lane abc.com xyz.com 
Jill XYZ 1 Job Street abc.com xyz.com 


  由于没有进行任何的正规化处理,我们将这种形式的表称为零状态形式的表。留意其中的url1和url2字段---如果我们在应用中需要第三个url呢?这样你就要在表格中多加一列,很明显,这不是一个好办法。如果你要创建一个富有扩展性的系统,你就要考虑使用第一个正规化的形式,并且应用到该表格中。 

第一级正规化形式 

1.消除每个表格中重复的组 
2.为每套相关的数据建立一个独立的表格 
3.使用一个主键来标识每套相关的数据 

  以上的表格明显违反了上面第一条的规定,那么第三条的主键又是什么意思呢?很简单,它只是在每个记录中加入一个唯一的、自动增加的整型值。通过这个值,就可以将两个姓名一样的记录区分开来。通过应用第一级正规化形式,我们得到了以下的表格: 

users 
userId name company company_address url 
1 Joe ABC 1 Work Lane abc.com 
1 Joe ABC 1 Work Lane xyz.com 
2 Jill XYZ 1 Job Street abc.com 
2 Jill XYZ 1 Job Street xyz.com 

  现在我们的表格可以说已经处在第一级正规化的形式了,它已经解决了url字段的限制问题,不过这样的处理后又带来了一个新的问题。每次在user表中插入一条记录的时候,我们都必须重复所有的公司和用户数据。这样不仅令数据库比以前大了,而且很容易出错。因此还要经过第二级正规化处理。 
第二级正规化形式 

1.为应用在多条记录的字段建立独立的表格 
2.通过一个foreign key来关联这些表格的值 

  我们将url的值放在一个独立的表格中,这样我们就可以在以后加入更多的数据,而无需担心产生重复的值。我们还通过主键值来关联这些字段: 

users 
userId name company company_address 
1 Joe ABC 1 Work Lane 
2 Jill XYZ 1 Job Street 

urls 
urlId relUserId url 
1 1 abc.com 
2 1 xyz.com 
3 2 abc.com 
4 2 xyz.com 

  如上所示,我们创建了独立的表格,users表中的主键userid现在与url表中的foreign key relUserId关联。现在的情况好象已经得到了明显的改善。不过,如果我们要为ABC公司加入一个员工记录呢?或者更多,200个?这样我们就必须重复使用公司名和地址,这明显不够冗余。因此我们将应用第三级正规化方法: 

第三级正规化形式 

1.消除不依赖于该键的字段 

公司名及地址与User Id都是没有关系的,因此它们应用拥有自己的公司Id: 

users 
userId name relCompId 
1 Joe 1 
2 Jill 2 

companies 
compId company company_address 
1 ABC 1 Work Lane 
2 XYZ 1 Job Street 


urls 
urlId relUserId url 
1 1 abc.com 
2 1 xyz.com 
3 2 abc.com 
4 2 xyz.com 


  这样我们就将companies表中的主键comId和users表中名字为relCompId的foreign key关联起来,就算为ABC公司加入200个员工,在companies中也只有一条记录。我们的users和urls表可以不断地扩大,而无需担心插入不必要的数据。大部分的开发者都认为经过三步的正规化就足够了,这个数据库的设计已经可以很方便地处理整个企业的负担,此看法在大多数的情况下是正确的。 

  我们可以留意一下url的字段--你注意到数据的冗余了吗?如果给用户用户输入这些url数据的html页面是一个文本框,可任意输入的话,这并没有问题,两个用户输入同样收藏夹的概率较少,不过,如果是通过一个下拉式的菜单,只让用户选择两个url输入,或者更多一点。这种情况下,我们的数据库还可以进行下一级别的优化--第四步,对于大多数的开发者来说,这一步都是忽略的,因为它要依赖一个很特别的关系--一个多对多的关系,这在我们的应用中是还没有遇到过的。 
数据关系 

  在定义第四个正规化的形式前,我想首先提一下三种基本的数据关系:一对一,一对多和多对多。我们回头看一下经过第一个正规化的users表。要是我们将url的字段放在一个独立的表中,每次在users表中插入一个记录,我们就会在urls表中插入一行。我们将得到一个一对一的关系:用户表中的每一行,都将在urls表中找到相应的一行。对于我们的应用来说,这既不实用也不标准。 

  然后看看第二个正规化的例子。对于每个用户记录,我们的表格允许有多个urls的记录与之关联。这是一个一对多的关系,这是一个很常见的关系。 

  对于多对多的关系来说,就有点复杂了。在我们的第三个正规化形式的例子中,我们的一个用户与很多的url有关,而我们想将该结构变为允许多个用户与多个的urls有关,这样我们就可以得到一个多对多的结构。在讨论前,我们先看看表格结构会有些什么变化 

users 
userId name relCompId 
1 Joe 1 
2 Jill 2 

companies 
compId company company_address 
1 ABC 1 Work Lane 
2 XYZ 1 Job Street 


urls 
urlId url 
1 abc.com 
2 xyz.com 


url_relations 
relationId relatedUrlId relatedUserId 
1 1 1 
2 1 2 
3 2 1 
4 2 2 


  为了进一步减低数据的冗余,我们运用第四级正规化形式。我们创建了一个颇奇怪的url_relations表,里面的字段均为主键或者foreign key。通过这个表,我们就可以消除urls表中的重复项目。以下是第四个正规化形式的具体要求: 

第四个正规化形式 

1.在一个多对多的关系中,独立的实体不能存放在同一个表格中 

  由于它仅应用于多对多的关系,因此大多数的开发者可以忽略这条规定。不过在某些情况下,它是非常实用的,这个例子就是这样,我们通过将相同的实体分离出来,并且将关系移到它们自己的表格中,从而改进了urls表格。 

为了令你更容易明白,我们举个具体的例子,以下将用一个sql语句选择出所有属于joe的urls: 

SELECT name, url FROM users, urls, url_relations WHERE url_relations.relatedUserId = 1 AND users.userId = 1 AND urls.urlId = url_relations.relatedUrlId 

如果我们想要遍历每个人的个人信息和url信息,我们可以这样做: 

SELECT name, url FROM users, urls, url_relations WHERE users.userId = url_relations.relatedUserId AND urls.urlId = url_relations.relatedUrlId 

第五级正规化形式 

还有一级正规化的形式,它并不常见,有点深奥,并且在大部分的情况下都是不必要的。它的原则是: 

1.原来的表格必须可以通过由它分离出去的表格重新构建 

  使用这个规定的好处是,你可以确保不会在分离的表格中引入多余的列,所有你创建的表格结构都与它们的实际需要一样大。应用这条规定是一个好习惯,不过除非你要处理一个非常大型的数据,否则你将不需要用到它。 

“数据库正规化和设计的方法有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: 数据库正规化和设计的方法有哪些

本文链接: https://www.lsjlt.com/news/61207.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 数据库正规化和设计的方法有哪些
    本篇内容介绍了“数据库正规化和设计的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
  • 数据库设计规范化要求有哪些
    本篇内容主要讲解“数据库设计规范化要求有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库设计规范化要求有哪些”吧!  要求一:表中应该避免可为空的列。 ...
    99+
    2022-10-18
  • 数据库设计规范有哪些
    1. 数据库表命名规范:表名应该具有描述性,表名应该使用小写字母,单词之间使用下划线连接。2. 字段命名规范:字段名应该使用小写字母...
    99+
    2023-06-10
    数据库设计规范 数据库
  • 数据库的设计方法有哪些
    本篇内容介绍了“数据库的设计方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
  • 数据库设计的方法有哪些
    这篇文章主要讲解了“数据库设计的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库设计的方法有哪些”吧!数据库设计技巧: 第2 部分—...
    99+
    2022-10-18
  • MySQL数据库设计规范有哪些
    本篇文章给大家分享的是有关MySQL数据库设计规范有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、数据库设计以下所有规范会按照【高危】...
    99+
    2022-10-18
  • SQLServer数据库有哪些设计规范
    这篇文章给大家介绍SQLServer数据库有哪些设计规范,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  SQLServer数据库的设计规范有什么  1、对象注释规则:  注释头:注释...
    99+
    2022-10-18
  • MongoDB 数据库的命名和设计规范有哪些
    今天就跟大家聊聊有关MongoDB 数据库的命名和设计规范有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。文档设计约束UTF-8 字符不能包含 ...
    99+
    2022-10-18
  • 有哪些合规的MySQL检查数据库设计
    本篇内容主要讲解“有哪些合规的MySQL检查数据库设计”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些合规的MySQL检查数据库设计”吧!MySQL作为关系...
    99+
    2022-10-18
  • 关系型数据库的设计规则有哪些
    本篇内容介绍了“关系型数据库的设计规则有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!E-R(Entity-relationship,实...
    99+
    2023-06-21
  • 关系型数据库设计规范有哪些
    关系型数据库设计规范有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、每个表增删改的范围尽量都在本表进行这条原则也是与三大范式有些相...
    99+
    2022-10-18
  • 数据库优化的方法有哪些
    这篇文章主要介绍数据库优化的方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据库优化的几种方式分别是:1、选取最适用的字段属性;2、使用连接来代替子查询;3、使用联合来代替...
    99+
    2022-10-18
  • php优化数据库的方法有哪些
    这篇文章运用简单易懂的例子给大家介绍php优化数据库的方法有哪些,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。php优化数据库的方法:1、选取最适用的字段属性;2、使用连接JOIN来代...
    99+
    2022-10-18
  • 数据库设计的误区有哪些
    这篇文章主要介绍“数据库设计的误区有哪些”,在日常操作中,相信很多人在数据库设计的误区有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”数据库设计的误区有哪些”的疑惑有所帮...
    99+
    2022-10-18
  • 数据库的设计技巧有哪些
    本篇内容介绍了“数据库的设计技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
  • MySQL数据库范式化设计的方法
    这篇文章主要讲解了“MySQL数据库范式化设计的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库范式化设计的方法”吧!一、设计范式问题: 什么是范式化设计,为什么需要反规范...
    99+
    2023-06-30
  • MySQL/Oracle数据库优化方法有哪些
    本篇内容介绍了“MySQL/Oracle数据库优化方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-18
  • mysql数据库分页优化的方法有哪些
    MySQL数据库分页优化的方法主要有以下几种:1. 使用索引:在分页查询中,使用合适的索引可以大大提高查询效率。可以为经常进行分页查...
    99+
    2023-08-30
    mysql数据库
  • 优化mysql数据库有哪些主要方法
    下文给大家带来关于优化mysql数据库有哪些主要方法,感兴趣的话就一起来看看这篇文章吧,相信看完优化mysql数据库有哪些主要方法对大家多少有点帮助吧。优化mysql数据库的方法:建立Index索引,少用s...
    99+
    2022-10-18
  • 数据库设计的基本原则有哪些
    数据库设计的基本原则有哪些?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。数据库设计的基本原则:(1)把具有同一个主题的数据存储在一个数据表...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作