我不是数据库专家,并且不确定在查询我的表时哪种方法是最好的。
我有一个表Availability
,其中包含特定用户每周可以工作的天数。
我已经这样定义了我的模型
monday: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false,
},
tuesday: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false,
},
wednesday: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false,
},
thursday: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false,
},
friday: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false,
},
saturday: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false,
},
sunday: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false,
},
现在,我想知道,当涉及到查询所有可以工作的用户(例如)时,这不是更快吗?星期一,拥有一个包含按位整数的列,以便我可以通过添加所有值来插入它,并使用 SQL Server 中的 OR
按位运算符对其进行查询?
感谢您的帮助:)
朱利安。
最佳答案
您是在问这是否可能或者是否是一个好的方法?
我在作业调度工具方面做了大量工作,我的团队使用 SQL Server 中的 SQL 代理作业调度程序作为开始的基础。在幕后,SQL 代理调度程序将调度存储在表中,并对某些列进行编码以对它们使用按位运算。
由于一周只有 7 天,您可以使用 tinyint
数据类型(1 字节 = 8 位)来存储此可用性数据。
Ob01000000 could be Monday = 64
0b00100000 could be Tuesday = 32
etc.
然后当您在查询中提取数据时...
WHERE Availability.AvailableDays | 64 = 64
将为您提供周一工作的任何人。
就我个人而言,我喜欢用这种方法来解决此类问题。
关于SQL Server : bitwise or separate fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46733817/