美文网首页
数据库设计常见问题

数据库设计常见问题

作者: 在阳光下睡觉 | 来源:发表于2020-10-31 19:42 被阅读0次

数据设计常见问题

  • 数据冗余
  • 更新异常
  • 插入/删除异常

无损连接分解

分解后的两张表自然连接后能得到原来的表叫做无损连接
重点是作为连接的属性必须是R1或R2的码,具有不可重复性

函数依赖

若A属性值确定了,则B属性值也唯一确定了,于是就有A→B
对所有关系都满足的函数依赖称为平凡的

平凡依赖

定义:
若X->Y,且Y是X的子集(对任一关系模式,平凡函数依赖必然成立),就是平凡函数依赖。

例如:
在学生表(学号,姓名,年级)中,(学号,姓名)可以推出学号和姓名其中的任何一个,这就是平凡函数依赖.

直白点说,就是只要Y是X的子集,Y就依赖于X。

非平凡依赖

定义:
若X→Y,但Y不是X的子集,就是非平凡函数依赖。

例如:
在学生表(学号,姓名,年级)中,通过(学号,姓名)可以推出这个学生所在的年级,但年级不是(学号,姓名)的子集,这是非平凡函数依赖.((学号,姓名)就是一个x,学号或者姓名就是一个x')。

候选码

本身是一个超码,但是它的任意子集不能是码

保持依赖

如果F上的每一个函数依赖都在R1或者R2上成立,则这个分解是保持依赖的

数据库范式

  • 1NF:属性不可分
  • 2NF:消除非主属性对于码的部分函数依赖
  • 3NF:消除非主属性对于码的传递函数依赖
  • BCNF: 消除主属性对于码的部分与传递函数依赖

BCNF分解算法

下面以 R(A, B, C, D), FD{AB→C, C→D, D→A}为例

先列出所有非平凡依赖

C→A, C→D
D→A
AB→C, AB→D
AC→D
BC→A
BD→A, BD→C
CD→A
ABC→C, ABC→C
BCD→A

找到所有键

由上面的所有平凡依赖可以找出所有键:AB, BC, BD

找出所有违反BCNF的FD(左边不包含键)

C→A, C→D, D→A, AC→D, CD→A

分解违反BCNF的依赖

从C→D开始分解,C+ = ACD
得到R1 = C+ = ACD,R2 = BC
其中BC是二元的,满足BCNF
对ACD,有D→A不符合BCNF,故仍需要分解
分解为AD和CD
所以分解结果为AD, CD, BC

相关文章

  • 常见电商项目的数据库表设计(MySQL版)

    简介: 目的: 电商常用功能模块的数据库设计 常见问题的数据库解决方案 环境: MySQL5.7 图形客户端,SQ...

  • 典型数据库架构设计与实践

    本文,将介绍数据库架构设计中的一些基本概念,常见问题以及对应解决方案,为了便于读者理解,将以“用户中心”数据库为例...

  • 数据库设计常见问题

    数据设计常见问题 数据冗余 更新异常 插入/删除异常 无损连接分解 分解后的两张表自然连接后能得到原来的表叫做无损...

  • 数据库

    mysql 数据库开发常见问题及优化 这篇文章从库表设计,慢 SQL 问题和误操作、程序 bug 时怎么办这三个问...

  • Mysql数据库常见问题说明及优化方法提示

    通过此文档对Mysql数据库及IBATIS使用过程中的常见问题和优化方式进行简单提示性描述,指导研发人员正确的设计...

  • 阿里数据库开发规范:谁还敢说你的数据库设计的“烂”

    数据库设计几个规范: 数据库命名规范、数据库基本设计规范、数据库索引设计规范、数据库字段设计规范、数据库SQL开发...

  • 数据库设计

    第六章 数据库设计 学习重点: 数据库设计的基本步骤; 数据库设计各阶段的具体设计内容; 数据库设计各阶段的设计描...

  • 规范化数据库设计

    规范化数据库设计 为什么需要数据库设计 当数据库比较复杂时我们需要设计数据库 糟糕的数据库设计 : 数据冗余,存储...

  • 典型数据库架构设计与实践 | 架构师之路

    转载自微信公众号【架构师之路】 本文,将介绍数据库架构设计中的一些基本概念,常见问题以及对应解决方案,为了便于读者...

  • MySQL 入门(四)

    九、规范化数据库设计 1. 为什么需要数据库设计 当数据库比较复杂时,需要设计数据库; 糟糕的数据库设计:数据冗余...

网友评论

      本文标题:数据库设计常见问题

      本文链接:https://www.haomeiwen.com/subject/eaolvktx.html