为了账号安全,请及时绑定邮箱和手机立即绑定

将分隔列表存储在数据库列中真的那么糟糕吗?

将分隔列表存储在数据库列中真的那么糟糕吗?

qq_花开花谢_0 2019-05-20 17:29:45
想象一下带有一组复选框的Web表单(可以选择其中的任何一个或全部)。我选择将它们保存在存储在数据库表的一列中的逗号分隔值列表中。现在,我知道正确的解决方案是创建第二个表并正确地规范化数据库。实现简单的解决方案更快,我想快速获得该应用程序的概念验证,而无需花费太多时间。我认为节省的时间和更简单的代码在我的情况下是值得的,这是一个可辩护的设计选择,还是我应该从一开始就将它标准化?更多上下文,这是一个小型内部应用程序,实际上取代了存储在共享文件夹中的Excel文件。我也在问,因为我正在考虑清理程序并使其更易于维护。在那里有一些我并不完全满意的事情,其中一个是这个问题的主题。
查看完整描述

6 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

关于SO的问题有很多问题:

  • 如何从逗号分隔列表中获取特定值的计数

  • 如何从该逗号分隔列表中获取仅具有相同2/3 / etc特定值的记录

逗号分隔列表的另一个问题是确保值一致 - 存储文本意味着拼写错误的可能性......

这些都是非规范化数据的症状,并强调了为什么要始终为规范化数据建模。非规范化可以是查询优化,在需要实际呈现时应用


查看完整回答
反对 回复 2019-05-20
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

一般来说,如果符合项目要求,任何事物都可以防御。这并不意味着人们会同意或想要捍卫你的决定......

通常,以这种方式存储数据是不理想的(例如,难以进行有效的查询),如果修改表单中的项目,可能会导致维护问题。也许你可以找到一个中间地带并使用代表一组位标志的整数代替?


查看完整回答
反对 回复 2019-05-20
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

是的,我会说这真的很糟糕。这是一种可辩护的选择,但这并不能使其正确或良好。

它破坏了第一个正常形式。

第二个批评是将原始输入结果直接放入数据库,而没有任何验证或绑定,这使您对SQL注入攻击持开放态度。

你所谓的懒惰和缺乏SQL知识的是新手所构成的东西。我建议花点时间做好,把它看作是学习的机会。

或者保持原样并学习SQL注入攻击的痛苦教训。


查看完整回答
反对 回复 2019-05-20
  • 6 回答
  • 0 关注
  • 676 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信