数据库设计 – 为什么要在SQL文本列中存储分隔列表?

前端之家收集整理的这篇文章主要介绍了数据库设计 – 为什么要在SQL文本列中存储分隔列表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我必须维护一个具有大量文本数据类型的列的应用程序,其中插入了多个值,用逗号,斜杠或有时甚至管道(|)字符分隔.我想弄明白你为什么要在地球上做这件事.

例如,订单表有一个名为details的列,其中包含以下信息:

2x #ABC-12345  Widget,Black: $24.99 /4x #ABC-12344 Widget,Blue: $23.50

/分隔行项目;有一个VBScript代码从记录集读取值并在For循环中解析它以显示使用类似的东西(这几乎就是代码读取的方式,变量名称和所有)arydtls = split(rstmp(“details”) ),“/”).在整个代码中针对各种表重复该方法.

在我看来,它只是100倍更好(更不用说更容易使用)只是将细节放在一个单独的表中并链接回它(有趣的是,对于Orders它确实这样做,但数据不是始终匹配详细信息文本字段,因为OrderDetail表在代码中更新;详细信息字段在应用程序中被视为只读.

我的前任是否知道我没有做过的事情,或者说“WTF?!!”我是对的.当我看这个架构?它看起来像是非常低效且难以像这样维护,并且它使得运行报告更加困难,因为我需要的数据可以包含在文本字段中,或者它可能在十几个表中具有相似信息并且用于不同的表中部分应用程序.

解决方法

Did my predecessor know something I didn’t,or am I right to be saying “WTF?!!” when I look at this schema?

不,你的前任没有.是的,你是对的.但是,请参见最后的注释.

It seems like it’s insanely inefficient and difficult to maintain like this,and it makes running reports extra difficult because the data I need could be contained in text fields OR it might be in one of a dozen tables that have similar information and are used in different parts of the application.

这是非常低效的.但是,请参见最后的注释.

列应始终是行的不可分割的属性.我在本专栏中看到了两个三个(可能是四个)属性的副本:

2x #ABC-12345  Widget,Blue: $23.50

>量(2x / 4x).
>代码(#ABC-12345 /#ABC-12344).
> description(Widget,Black:/ Widget,Blue 原文链接:https://www.f2er.com/mssql/78845.html

猜你在找的MsSQL相关文章