在我的应用程序中,我希望用户选择他的工作日。然后将它们存储在数据库中。当然,我的应用程序将处理用户的数据,例如:今天是特定用户的工作日,这些用户是今天应该工作的用户,...等。

我的问题是,这样做的最佳做法是什么?我应该使用:

  1. 用户表中的位置字段
  2. 通过创建几天,用户和days_users的表格,许多到许多关系表。先感谢您。
有帮助吗?

解决方案

我要说的是,掩模字段是一个关系反图案。

一个字段应该具有一个有意义的值,否则您最终会出现查询问题 - 每次需要查询它时,都可以解析字段。

这样的字段还需要额外的文档,因为它存储的值不是自我描述。

其他提示

BitMasking字段本质上更加隐秘,您需要创建其他内容来解释您在BitMask中存储的内容。

第二种方法更加透明,易于理解,如果您需要添加更多值,它会更加灵活。使用BitMask,每次添加一个值时,与关系方法相比,您都需要再次重做位图解码器。

我犯了一个选择选项1的错误,并有机会回到过去,我绝对会以其他方式做。

您的数据库几乎肯定不会使用索引在您的位掩码上进行位查询。因此,如果您想发现,每个工作的人都在星期二工作,则每次都会进行索引扫描。随着您的桌子变大,这会破坏您的性能。您可以通过缓存A围绕此围绕此功能进行优化 SELECT DISTINCT(bitmaskfield) 提前,在您自己的应用程序中执行BitMask逻辑,然后将其贴成适当的 WHERE bitmaskfield IN (...) 条款,但这很快就变得无法实现,因为您必须在更改数据库中的每个地方更新您的独特的BitMask缓存。

额外的桌子和连接似乎很痛苦,但咬合会变得更糟。相信我。将数据库用作数据库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top