【问题标题】:best way to store options in a db在数据库中存储选项的最佳方法
【发布时间】:2010-07-12 00:40:12
【问题描述】:

我有一张表,其中一列是 co_com

这是沟通偏好

共有三个选项(而且永远都是) 我不想为这些值设置单独的列

所以我想将它们存储为

短信/电子邮件/传真 短信=是的 电子邮件 = 否 传真 = 是 将存储为:101

但是, 我认为那不是最好的方法

你还能看到哪些其他方式?

是的,我知道这是一个主观问题

但我不知道该怎么问。

【问题讨论】:

  • 为什么不想将值存储在单独的列中?将所有内容存储在一列中需要您/您的 PHP/您的数据库做额外的工作来分离它们

标签: php database storage


【解决方案1】:

你是对的。这实际上不是最好的方法。

您说您不想为这些值设置单独的列,但这正是您应该做的。

【讨论】:

  • 这是我试图避免的更多设置它们的麻烦,但是从它的声音来看,如果我不这样做,它会咬我。愚蠢的 7 个工作日来回答您的查询支持工作人员..
  • @Hail:我们以前都曾走过这条路。我们只是你内心的良心之声...... :)
【解决方案2】:

将逻辑值的组合存储为编码二进制是... 1900 年代。说真的,这些天磁盘空间要花多少钱,将三位信息塞进一个数字而不是三个字节或字符可以节省多少?

继续,用合理的名称创建三列,并在其中存储 0 和 1,或者如果您的数据库很奇怪,那么故事“Y”和“N”。但是不要做这种二进制聪明的东西。当您尝试编写合理的查询时,它最终会咬您一口。

【讨论】:

  • 不是每个人都有听说过位类型的数据库。据我所知,将布尔值编码为单个字符仍然是 Oracle 数据库中的标准做法。 (废话!)不要问这个产品是如何成为市场领导者的!
  • Oracle 单独对字符串 null 的处理就足以让我想吐。
【解决方案3】:

在我看来,列是最好的方式,如果没有别的,它是为了易于使用。这些列是直截了当的,将来不会令人困惑。但我不会说将它们作为 3 位数字存储在单列中一定很糟糕,只是令人困惑。以后不用再头疼了,做 3 篇专栏。

【讨论】:

  • 如果它令人困惑,那么它一定是坏的。
  • 这不仅令人困惑,而且很糟糕。它是在空间非常宝贵的时候完成的,因为空间成本超过了混乱/易用性的成本。
  • 附带说明,这样的情况是我们需要了解摆在我们面前的事情的原因,即使这些信息看起来毫无用处。这也是我们必须努力尽可能多地了解我们使用的工具/技术/技术的原因。
【解决方案4】:

例如,另一种观点是拥有另一个名为com_options 的表。有一个ID 字段和一个options 字段,将所有不同的通信选项组合存储在options 字段中,并在ID 字段中存储一个唯一ID,在您的co_com 表中有一个opt_id引用com_options 表中的ID 的字段。然后使用INNER JOIN 将这两个表连接在一起。

【讨论】:

  • 您是 Oracle 顾问吗?你有硬件销售的规定吗? ;)
  • 大声笑,naa,只是添加另一个观点,可能是处理器密集型,但它是我目前能想到的最规范化的方式:oP...但是,如果你想购买在不久的将来任何此类商品,请随时与我联系:oP jk
【解决方案5】:

如果您的数据库是 MySQL,那么您可以使用 SET 数据类型。

没关系,别担心——有时我们应该非规范化表:)

但如果您的数据库不是 MySQL,那么您也可以使用此方法,但实现将是非您的数据库原生的。与默认规范化一对多关系相比,一大堆数据的按位逻辑也能很好地工作。因为它更面向计算机。

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 2010-11-25
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多