SQL反模式学习笔记8 多列属性

目标:存储多值属性

 

反模式:创建多个列。比如一个人具有多个电话号码、座机号码、手机号码等。          

      1、查询:多个列的话,查询时可能不得不用IN,或者多个OR;

  2、添加、删除时确保唯一性、判断是否有值:这些都很麻烦;

  3、字段的列数无法确定具体数量。

 

如何识别反模式:当出现以下情况时,可能是反模式

     1、应该支持的动态列的数量是多少?

     2、如何才能在SQL查询中同时查询多列?

 

合理使用反模式

  在默写情况下,一个属性可能有固定数量的候选值,并且他们的存储位置和顺序都是固定的。这样的话,可以使用反模式。

 

解决方案:创建从属表,仅使用一列来存储多值属性。

             在从属表中定义一个外键,将这个值和目标表中的主键Id关联起来。

 

结论:将具有同样意义的值存储在同一列中。

 

 

SQL反模式,系列学习汇总

1SQL反模式学习笔记1 开篇

2、SQL反模式学习笔记2 乱穿马路

3、SQL反模式学习笔记3 单纯的树

4、SQL反模式学习笔记4 建立主键规范【需要ID】

5、SQL反模式学习笔记5 外键约束【不用钥匙的入口】

6、SQL反模式学习笔记6 支持可变属性【实体-属性-值】 

7、SQL反模式学习笔记7 多态关联

8、SQL反模式学习笔记8 多列属性

9、SQL反模式学习笔记9 元数据分裂

10、SQL反模式学习笔记10 取整错误

11、SQL反模式学习笔记11 限定列的有效值

12、SQL反模式学习笔记12 存储图片或其他多媒体大文件

13、SQL反模式学习笔记13 使用索引

14、SQL反模式学习笔记14 关于Null值的使用

15、SQL反模式学习笔记15 分组

16、SQL反模式学习笔记16 使用随机数排序

17、SQL反模式学习笔记17 全文搜索

18、SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题

19、SQL反模式学习笔记19 使用*号,隐式的列 

20、SQL反模式学习笔记20 明文密码

21、SQL反模式学习笔记21 SQL注入

22、SQL反模式学习笔记22 伪键洁癖,整理数据

 

posted @   张传宁  阅读(777)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
页脚 HTML 代码
点击右上角即可分享
微信分享提示