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

发布于 2022-09-12 01:07:43 字数 112 浏览 21 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

画离情绘悲伤 2022-09-19 01:07:43

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

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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文