当新用户注册时,我很难为通知模块制定 SQL。
我有一个Notifications数据库,我设置了要发送的通知。例子:
- 当男人和蓝眼睛注册时发送通知;
- 女性注册时发送通知;
- 当一个蓝眼睛的女人,棕色并在 Foo 公司工作时发送通知;
通过这些规则,我们可以看到有多种可能性(因此表格列是可选的)。
一些细节:
- 表列被定义为整数,因为是 FK。我只是没有放表,因为结构是不必要的,因为 SQL 只会在用户和通知之间发生关系;
- 日期字段用于存储此人的通知登记日期。所以我只能过滤通知用户的新注册;
表结构
用户: +------------+----------+------+-----+---------+-- ----------+ | 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 | +------------+----------+------+-----+---------+-- ----------+ | 身份证 | 整数(11) | 否 | 优先级 | | 自动增量 | | 性别 | 整数(11) | 是 | | | | | 染发 | 整数(11) | 是 | | | | | 眼睛颜色 | 整数(11) | 是 | | | | | 公司 | 整数(11) | 是 | | | | | 日期 | 日期时间 | 否 | | | | | ... | | | | | | +------------+----------+------+-----+---------+-- ----------+ 通知: +------------+----------+------+-----+---------+-- ----------+ | 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 | +------------+----------+------+-----+---------+-- ----------+ | 身份证 | 整数(11) | 否 | 优先级 | | 自动增量 | | 性别 | 整数(11) | 是 | | | | | 染发 | 整数(11) | 是 | | | | | 眼睛颜色 | 整数(11) | 是 | | | | | 公司 | 整数(11) | 是 | | | | | 日期 | 日期时间 | 否 | | | | +------------+----------+------+-----+---------+-- ----------+
最初的想法
我最初的想法是为每种可能性进行选择并通过联合加入:
-- 按性别通知选择新用户 选择 * 来自通知 内部加入用户( User.Date >= Notification.Date 和 Notification.Gender = User.Gender 和 Notification.HairColor 为空并且 Notification.EyeColor 为空并且 Notification.Company 为空 ) 联合所有 -- 按性别和发色通知选择新用户 选择 * 来自通知 内部加入用户( User.Date >= Notification.Date 和 Notification.Gender = User.Gender 和 Notification.HairColor = User.HairColor 和 Notification.EyeColor 为空并且 Notification.Company 为空 ) -- ... 以此类推,对每个选项做一个选择,结果是16个选择(4列:性别、头发颜色、眼睛颜色和公司)
我的问题是:
有没有另一种方法可以让我更轻松地查询通知的所有可能性?
按照这种 4 列的结构,我们已经有 16 个选择。在我的真实结构中,将有更多的列,其中有些东西无法保持这种状态。
是否有其他建议的数据存储结构以更好地执行此功能?