gpt4 book ai didi

sql - 设计问题 - 在列、行或其他位置放置数百个是/否开关?

转载 作者:行者123 更新时间:2023-12-04 20:56:02 28 4
gpt4 key购买 nike

我们正在将使用分层数据库的旧应用程序移植到关系网络应用程序,并试图找出移植配置开关(Y/N 值)的最佳方法。

我们的旧系统有 256 个不同的开关(每个客户端),每个开关都存储为 8 个 32 位数据字段之一中的一个位。每个客户端通常会设置约 100 个开关。要读取或设置开关,我们将使用使用#define 值的按位算术。例如:

if (a_switchbank4 & E_SHOW_SALARY_ON_CHECKS) //If true, print salary on check

我们正在讨论在我们的新关系 (MS-SQL) 数据库中存储开关的方法:

  1. 将每个开关放在自己的字段中
    • 优点:读/写/访问快速且容易 - 每个客户 1 行
    • 缺点:看起来很笨拙,每次添加开关时都需要更改架构
  2. 为每个客户端的每个交换机创建一行
    • 优点:无限制开关,无需使用新开关更改架构
    • 缺点:提取数据稍微困难一些,没有额外工作就失去了智能感知
  3. 维护位域
    • 优点:可以利用相同的代码,减少机器之间的 XML 数据传输
    • 缺点:对我们的开发人员没有任何意义,难以调试,使用错误的“切换组”字段进行比较太容易了

我倾向于#1 ...有什么想法吗?

最佳答案

这取决于几个因素,例如:

  • 每个客户端设置多少个开关
  • 实际使用了多少开关
  • 添加开关的频率

如果我不得不猜测(而且我会猜测),我会说您真正想要的是标签。一个表有客户,每个客户都有一个唯一 ID,另一个表有标签(标签名称和唯一 ID),第三个表有客户 ID/标签 ID 对,以指示哪些客户有哪些标签。

这与您的解决方案 #2 的不同之处在于,标签仅适用于该开关为真的客户端。换句话说,您只存储客户端 ID 和开关 ID,而不是存储客户端 ID、开关 ID 和 bool 值,但仅限于具有该开关集的客户端。

与解决方案二相比,这占用了大约三分之一的空间,但真正的优势在于解决方案一和三:索引。如果您想找出诸如哪些客户端设置了开关 7、45 和 130 而不是 86 或 14 之类的事情,您可以使用标记表上的单个索引有效地完成它们,但是没有实用的方法可以使用另一个索引来完成它们解决方案。

关于sql - 设计问题 - 在列、行或其他位置放置数百个是/否开关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/637457/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com