【问题标题】:Storing multiple item settings in database在数据库中存储多个项目设置
【发布时间】:2015-06-10 13:06:57
【问题描述】:

我正在建立一个画廊。每个图像都是一行,包含名称、src 和 order 等。

我希望每张图片多 3 个选项:精选、可见、禁用。

我应该将它们作为列吗?

或者只有 1 列设置并存储 3 个二进制数?

例如:

111 = 精选、可见、禁用

110 = 精选、可见

010 = 可见

001 = 禁用

或者我什至可以将其转换为 DEC 并简单地存储 0 到 7(如 CHMOD 样式)

最好的方法是什么?

谢谢!

【问题讨论】:

  • 定义“最佳”。除非您有相当大(并且可衡量)的性能问题,否则我建议您使用最简单 方法。这将是良好命名和定义的列。如果需求发生变化,请从那里更新。但是没有必要做一些过于聪明的事情。
  • 肯定要分开列;简单。我推荐CHAR(1) 的值为YN。每个人都会明白这一点。如果您有 1000 万行,您将使用比位方法多 10 Mb 的微不足道的磁盘空间。这根本不是真正的权衡。
  • 谢谢你们。这正是我需要知道的。我只是不知道多行是否比单行中的字符更昂贵。我会很简单。
  • 我感到困惑的原因是因为我正在阅读Reddit's database which only has 2 tables(事物和数据)和“声称”比使用行表现更好。我虽然()
  • 坚持尝试、测试和形式化的方法,除非您 a) 真的知道自己在做什么,并且 b) 真的需要打破规则或转换范式。有一句格言说过早优化是万恶之源——即担心你实际上没有的性能问题可能会让你误入歧途。了解规范化,并在使用事务性关系数据库时尽可能遵守这些规则。

标签: mysql database-design database-schema


【解决方案1】:

取决于。只有带袖珍保护器的程序员才能查看数据和应用程序代码吗?我完全赞成复杂性,但我会说 spring 需要一点开销。此外,尽管做出了勇敢的努力,但我未能在 mysql 中进行按位搜索

按位搜索的问题,请参阅this

【讨论】:

    【解决方案2】:

    如果你问如何在 MySQL 中存储/操作......

    • SET ('Featured', 'Visible', 'Disabled')
    • TINYINT UNSIGNED 做位运算;见1 << 2给你4; 0x4 是用十六进制表示文字 4 的一种方式; a | b 是按位或等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-07
      • 2019-05-24
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      相关资源
      最近更新 更多