文章目录
一,第一范式
如果某个域中元素被认为是不可分的,则这个域称为是原子的
- 非原子域的例子:
---- 复合属性:名字集合
---- 多值属性:电话号码
---- 复合数据类型:面向对象的
如果关系模式R中的所有属性的域是原子的,则R称为属于第一范式(1NF)
非原子值存储复杂并易导致数据冗余
- 我们假定所有关系都属于第一范式
如何处理非原子值
- 对于组合属性:让每个子属性本身称为一个属性
- 对于多值属性:为多值集合中的每个项创建一条元组
原子性实际上是由域元素在数据库中被使用决定的
- 例,字符串通常是被认为是不可分割的
- 假设学生被分配这样的标识号:CS0012或EE1127,如果前两个数字表示系所,后四位表示学生在该系所内的唯一号码,则这样的标识号不是原子的
- 当采用这种标识号时,是可取的。因为这需要额外的编程,而且信息是在应用程序中,而不是在数据库中编码。
二,关系数据库设计中易犯的错误
关系数据库设计要求我们找到一个“好的”关系模式集合。一个坏的设计可能导致:
- 数据冗余
- 插入、删除、修改异常
假设我们用以下模式代替instructor模式
和department模式
:
inst_dept(ID, name, salary, dept_name, building, budget)
2.1 数据冗余
每个系的dept_name
,building
,budget
数据都要重复一次
缺点:浪费空间,可能会导致不一致问题