Mysql 在同一个表或单独的关系表(laravel)上实现用户通知

Mysql 在同一个表或单独的关系表(laravel)上实现用户通知,mysql,database,Mysql,Database,我有一个用户和发票表,我想通知他们可以打开/关闭它们。 现在我的问题是,我应该在users表中添加5列,在invoice表中添加3列,使其打开或关闭,还是按如下方式创建2个表: notification\u list和:notification\u user使用户能够打开或关闭来自用户模型和发票的通知。 这里的问题是,一旦用户表增长,notification\u user将成为一个庞大的表。对于每个用户,我至少需要添加5条记录。 我使用的是laravel和它的表和关系,所以我可以使用变形关系,但

我有一个用户和发票表,我想通知他们可以打开/关闭它们。 现在我的问题是,我应该在users表中添加5列,在invoice表中添加3列,使其打开或关闭,还是按如下方式创建2个表:
notification\u list
和:
notification\u user
使用户能够打开或关闭来自用户模型和发票的通知。 这里的问题是,一旦用户表增长,
notification\u user
将成为一个庞大的表。对于每个用户,我至少需要添加5条记录。 我使用的是laravel和它的表和关系,所以我可以使用变形关系,但我仍然不知道在表内还是在单独的表上实现它更好。如果可以同时对所有发票进行全局切换,谢谢 您肯定需要
notification\u列表
,但我不想
notification\u user
而是想在
users
表中添加额外的列,或者创建类似
users\u preferences
的内容来存储多个用户首选项。为每个首选项创建单独的表似乎不是一个好的解决方案

是否应分别对每张发票执行此操作 实际上,您不能向
发票
用户
表中添加额外的列,因为您需要为每个用户添加一列


您必须使用您的解决方案Nr 2。但请记住,您不需要在表中创建任何记录,除非它们不同于默认行为。这意味着只有当用户切换按钮时,才能将记录添加到表中。此外,一旦发票不再处于活动状态,您也可以删除这些记录。因此,这个新表的增长速度并没有那么快。

对于用户通知首选项,您也只能使用一个字段。但这种解决方案需要良好的结构

它基于这样一个事实:您需要跟踪的只是偏好的状态(开或关)

因此,将其保存为包含用户优先权的整数。以下是一个例子:

$preference1 = 1;
$preference2 = 0;
$preference3 = 0;
$preference4 = 1;
$preference5 = 0;

//the value to save is the integer result of the binary 01001
$preference = 1 * $preference1 + 2 * $preference2 + 4 * $preference3 + 8 * $preference4 + 16 * $preference5;
//or simply
$preference = bindec($pref5.$pref4.$pref3.$pref2.$pref1);
现在要检查是否启用了特定首选项,请使用逐位比较

如果($preference&4){//preference 3的值为4
//首选项3已启用。
}
//您还可以同时检查多个优先级
如果($preference&5==5){//这是首选项3和首选项1
//用户已启用这两个首选项
}
您还可以在数据库请求中使用它

$users=User::whereRaw(“位计数('prefrence'&4)”)->get();
//这将为您提供启用首选项3的所有用户
要向该解决方案添加更多结构,您应该在用户模型中声明常量

类用户扩展可验证性
{
常数PREFRENCE1=1;
常数PREFRENCE2=2;
常数PREFRENCE3=4;
常数优先4=8;
常数优先5=16;
//...
}
//这样,一切都会变得更有意义,比如:
$users=User::WHERRAW(“比特计数('prefrence'&“.User::PREFERENCE3”)->get();
if($preference&User::PREFERENCE3){
//首选项3已启用。
}

PS:确保数据库中的整数大小不低于您要保存的首选项编号。

再次阅读时,我开始思考我是否正确理解了您的问题。您是为所有发票通知全局切换开/关,还是为每个发票单独切换开/关?我真的不明白为什么会有人这样做,除非使用资源超低的系统。多个具有正确命名的
bit
列,如
receive\u invoice\u notifications
,将使您的代码更易于阅读。@NoOorZ24这将使您的解决方案可扩展(和可伸缩),而无需更改数据库结构。你可以很容易地在你的代码中添加新的偏好类型。我知道你要做的是什么,我会尽量把它抽象出来,而不必让别人来处理