数据库的关系模型允许有多值属性(一个属性中可以有有多个值)吗?

Timecho
  • 6

学校里教Sqlserver,这道题无法理解。原题认为数据库关系模型不允许有多值属性,老师的解释是 举例 一个学生(实体)的学号只能有一个。
但是我的考虑是,数据库中总会有需要在一个属性中存放多个值的情况。

回复
阅读 2.4k
1 个回答

嗯,这个问题是这样理解的:
1: 关系数据库(SqlServer,Oracle,Mysql,postgreSQL)并不会阻止你在一个列中放入多值. 例如:你在开发一个车辆管理系统中,你设计了一个列叫"型号",而填入的行内容是"宝马X1","奥迪A8","奥迪Q7". 这里"型号"这列隐含了品牌这个信息,实际表达的是品牌+型号, 在随后的应用中如果你有提取品牌的需求,就需要取出"型号"列进行字符串拆解, 这不仅仅费事还会影响以后的按品牌统计. 但是, 关系数据库不会阻止你这样做.

2: 第一条例子中,显然不是一个好的做法. 在人们设计数据库的过程中,慢慢总结了一些好的做法, 叫做关系模型范式(可以自己去查). 第一条例子恰好违反了第一范式, 所以不是好的设计(这个不绝对,实际工作中有时为了特定需求会可以违反某些范式)

3: 那既然这个例子违反了第一范式,如何改正它呢? 通常有两种方法: 一是增加一列,对上面的例子就是增加"品牌"列, 将品牌和型号分列存储; 二是将一条记录拆成两条记录(这个对上面的列子不适用),适用于多值是平行多值(没有父子关系, 包含关系,上下关系的);

建议学习一下关系模型三范式,思考一下为什么范式这样规定. 另外,凡事无绝对,实际中要以实际需要考量,不可刻板的应用范式. 羡慕学生时代的你们, 加油!!!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏