想象一下带有一组复选框的Web表单(可以选择其中的任何一个或全部)。我选择将它们保存在存储在数据库表的一列中的逗号分隔值列表中。现在,我知道正确的解决方案是创建第二个表并正确地规范化数据库。实现简单的解决方案更快,我想快速获得该应用程序的概念验证,而无需花费太多时间。我认为节省的时间和更简单的代码在我的情况下是值得的,这是一个可辩护的设计选择,还是我应该从一开始就将它标准化?更多上下文,这是一个小型内部应用程序,实际上取代了存储在共享文件夹中的Excel文件。我也在问,因为我正在考虑清理程序并使其更易于维护。在那里有一些我并不完全满意的事情,其中一个是这个问题的主题。
6 回答
慕容森
TA贡献1853条经验 获得超18个赞
关于SO的问题有很多问题:
如何从逗号分隔列表中获取特定值的计数
如何从该逗号分隔列表中获取仅具有相同2/3 / etc特定值的记录
逗号分隔列表的另一个问题是确保值一致 - 存储文本意味着拼写错误的可能性......
这些都是非规范化数据的症状,并强调了为什么要始终为规范化数据建模。非规范化可以是查询优化,在需要实际呈现时应用。
MMMHUHU
TA贡献1834条经验 获得超8个赞
一般来说,如果符合项目要求,任何事物都可以防御。这并不意味着人们会同意或想要捍卫你的决定......
通常,以这种方式存储数据是不理想的(例如,难以进行有效的查询),如果修改表单中的项目,可能会导致维护问题。也许你可以找到一个中间地带并使用代表一组位标志的整数代替?
蛊毒传说
TA贡献1895条经验 获得超3个赞
是的,我会说这真的很糟糕。这是一种可辩护的选择,但这并不能使其正确或良好。
它破坏了第一个正常形式。
第二个批评是将原始输入结果直接放入数据库,而没有任何验证或绑定,这使您对SQL注入攻击持开放态度。
你所谓的懒惰和缺乏SQL知识的是新手所构成的东西。我建议花点时间做好,把它看作是学习的机会。
或者保持原样并学习SQL注入攻击的痛苦教训。
添加回答
举报
0/150
提交
取消