位置: 编程技术 - 正文

数据库设计三大范式简析(数据库设计三大范式)

编辑:rootadmin

推荐整理分享数据库设计三大范式简析(数据库设计三大范式),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:数据库设计三大模型,数据库设计三大范式,数据库设计三大范式是什么,数据库设计三大模型,数据库设计三大阶段,数据库设计三大模型,数据库设计三大原则,数据库设计三大原则,内容如对您有帮助,希望把文章链接给更多的朋友!

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 在实际开发中最为常见的设计范式有三个:

1.第一范式(确保每列保持原子性)

第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。

Notice: Undefined index: CMSdown in /data/webroot/gcms/lib/Api/Open/Article.php on line img////_dffd3bb7e.png" alt="查看图片" />

上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。

2.第二范式(确保表中的每列都和主键相关)

第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

数据库设计三大范式简析(数据库设计三大范式)

比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。

订单信息表

Notice: Undefined index: CMSdown in /data/webroot/gcms/lib/Api/Open/Article.php on line img////_dffdce3cd.png" alt="查看图片" />

这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。

而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了。如下所示。

Notice: Undefined index: CMSdown in /data/webroot/gcms/lib/Api/Open/Article.php on line img////_dffeadf.png" alt="查看图片" />

这样设计,在很大程度上减小了数据库的冗余。如果要获取订单的商品信息,使用商品编号到商品信息表中查询即可。

3.第三范式(确保每列都和主键列直接相关,而不是间接相关)

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。如下面这两个表所示的设计就是一个满足第三范式的数据库表。

Notice: Undefined index: CMSdown in /data/webroot/gcms/lib/Api/Open/Article.php on line img////_dfff2fb.png" alt="查看图片" />

这样在查询订单信息的时候,就可以使用客户编号来引用客户信息表中的记录,也不必在订单信息表中多次输入客户信息的内容,减小了数据冗余。

标签: 数据库设计三大范式

本文链接地址:https://www.jiuchutong.com/biancheng/347711.html 转载请保留说明!

上一篇:防御SQL注入的方法总结(防御sql注入的方法有哪几种)

下一篇:跨数据库实现数据交流(如何跨数据库查询)

  • 一般纳税人企业所得税多久申报一次
  • 企业境外投资管理办法
  • 小规模零税率申报流程
  • 计提本月短期借款利息是权责发生制吗
  • 固定资产盘点折旧怎么算
  • 财务报表没有申报表
  • 一般纳税人什么时候用简易计税
  • 加计抵减怎么入账
  • 哪些财务指标可以用于判断一个企业即将发生财务危机
  • 无形资产摊销是谨慎性原则吗
  • 当月的费用次月入账可以么
  • 170平方的房子装修费用
  • 企业所得税 税法
  • 普通发票每个月有限制吗
  • 房地产公司需要和哪些部门打交道
  • 以前固定资产入账折旧怎么提
  • 小型微利企业普惠性税收减免政策执行期限
  • 报废的周转物怎么处理?
  • 硬盘的日常维护需要做到什么?
  • 虚拟机中如何将文件移动到普通用户的家目录下
  • rpcclient.exe - rpcclient是什么进程 有什么用
  • linux从入门到什么搞笑
  • 预收账款何时结转
  • PHP:stream_register_wrapper()的用法_Stream函数
  • linux中loop的含义
  • 差旅费津贴为什么不交个人所得税
  • 非货币性资产投资个人所得税
  • 销售旧的固定资产 税法规定
  • 涉及产权的案例
  • 加计扣除减免政策
  • 高德地图api是什么意思
  • 一般纳税人企业所得税如何计算
  • 无形资产摊销怎么算月摊销额
  • php判断查询结果是否存在
  • php的序列化操作生成的哪种格式
  • 技术咨询费属于
  • 公益性怎么解释
  • 进项税额加计扣除5%账务处理
  • 发票校验码的作用
  • 前端架构优化
  • 新入职员工什么时候发工资
  • 固定资产会计上与税法上提折旧时间
  • 企业哪些进项税不能抵扣
  • 小规模季度超过45万了怎么缴纳
  • 某首饰商城为增值税一般纳税人,2021年1月发生以下业务
  • etc的充值发票可以报账吗
  • 筹资费用和财务费用一样吗
  • 修理费未收到发票怎么办
  • 当月没认证的发票当月不用进行账务处理吗
  • 商品未入库直接销售怎么记账
  • 收回多发工资需要什么附件入账
  • 金蝶专业版怎么反过账
  • 建筑企业案例
  • 房地产开发企业资质管理规定
  • mysql 备份和恢复
  • 如何用u盘装系统win10
  • windows server 2008 日志文件在哪
  • windows8.
  • 安装centos图形界面
  • win7系统怎么重置网络
  • win 7系统无法删除系统文件
  • mac修改java版本
  • win8.1无法进入系统
  • 桌面上有desktop.ini文件
  • 如何解决焦虑的心理
  • window8系统ie浏览器在哪里
  • div left
  • python生成二维码添加图片
  • cocos2dx-3.2+lua 启动项目小技巧
  • javascript登录验证
  • javascript数据结构
  • jquery 插件编写
  • python selenium原理
  • JavaScript获取网址之后跳转
  • cshrc语法
  • python libnum
  • 国家税务网上办税服务厅官网
  • 买了发票但是税控机里显示没有发票怎么办?
  • 天津住房公积金管理中心官网
  • 浅谈企业所得税论文
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设