【问题标题】:Is there any issue in storing the values in SQL Server DB as comma separated values?将 SQL Server DB 中的值存储为逗号分隔值有什么问题吗?
【发布时间】:2017-03-27 22:58:51
【问题描述】:

将 SQL Server DB 中的值存储为逗号分隔值有什么问题吗?

我有 100 个类别,每个类别有 500 个产品。我最初的想法是将产品代码存储在逗号分隔值中,以便表中只有 100 条记录:

  catagcd1 - prod1,prod2,prod3......
  catagcd2 - prod2,prod3,prod5......

但是当我问我的朋友时:不要将其存储为逗号分隔,存储为正常结构。这意味着:

   catagcd1 - prod1
   catagcd1 - prod2
   catagcd1 - prod3
   catagcd2 - prod2
   ----------------
   ----------------

我的方式和他的有什么区别?从性能的角度来看还有什么区别?能解释一下吗?

【问题讨论】:

  • 逗号分隔的值甚至违反了第一范式,通常是一个坏主意。 SQL Server 完全没有问题有 500 行 - 哎呀,即使有 500'000 行!但是试图将这些逗号分隔的值解析回单独的值是一团糟,并且需要大量(不必要的)代码。建议:不要这样做! 行数的“节省”完全无关紧要,根本没有帮助 - 设计和查询中的混乱非常相关 将来会给你带来很多悲伤。
  • 为什么还要存储这 100 条记录?为什么不将 100 条记录也存储为逗号分隔列表,然后您将拥有一条记录!如果 100 比 50000 好,那么 1 肯定更好。

标签: asp.net sql sql-server database csv


【解决方案1】:

您的朋友可能指的是database normalisation,因此您在categoryproduct 之间存在一对多关系,或者如果是多:多(categoryproductcategoryproduct)一个产品可以出现在多个类别中。

以逗号分隔值存储数据的问题是每次需要处理产品时都需要对产品字符串进行解码,这可能会很慢而且很麻烦。

作为替代方案,如果您从不需要直接引用产品,您也可以将产品/类别层次结构存储在 Xml 列中(解决类似于文档或多值数据库的问题)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多