数据库很多列与在运行时处理的一个字符串列

时间:2014-01-07 18:29:39

标签: sql ruby-on-rails database

显而易见的答案是,将一列作为字符串是没有意义的,因为您无法对其执行任何正常的数据库查询。但是说你想存储用户信息,例如他们的用户名,姓名和电子邮件的隐私首选项等等。

将此作为单个列命名,例如,“settings”会更好地表现,因为这些变量不会与其他任何模型一起使用吗?

此变量类似于“{username => true,name => true,email => false}”,可在运行时处理。

2 个答案:

答案 0 :(得分:0)

在性能方面需要考虑很多因素。如果连接或数据库服务器速度很慢,那么按照建议(提高性能)可能是正确的。

但是,请记住,您仍然需要解析字符串。

在大多数专业项目中,这将被视为可怕的做法。像你建议这样做会使代码非常难以维护。它为各种各样的东西打开了大门,比如喜欢的颜色,等等。

如果你正在修补你的地下室,那就去做吧,但是如果你想以写代码为生,那就太可怕了。

答案 1 :(得分:0)

您创建的字符串将比存储单独的列消耗更多空间,因此表行会更大,并且数据库服务器上的缓存效率会降低。我根本没有看到潜在的性能优势。

我认为这可能是可接受的数据库实践的唯一情况是:

  1. 您只将表示许多数据元素的字符串视为单个信息元素:例如,如果您要存储已接收或传输的JSON或XML消息的副本。
  2. 数据项表示您事先无法知道的一组数据元素,并且由于某种原因您没有资源使用类似键值存储的内容。