mysql表中属性限制为指定的几个值_数据库的关系模型允许有多值属性(一个属性中可以有有多个值)吗?...

本文探讨了在数据库设计中,如何避免在一个列中存放多值的问题,指出这种做法违反了关系模型的第一范式,可能导致数据冗余和不一致性。作者建议遵循数据库范式理论,如增加新列或拆分记录来改善设计,并强调实际应用中应灵活运用范式,以满足具体需求。
摘要由CSDN通过智能技术生成

嗯,这个问题是这样理解的:

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值