elasticsearch,architecture,Mysql,Database Design,elasticsearch,Architecture" /> elasticsearch,architecture,Mysql,Database Design,elasticsearch,Architecture" />

Mysql 设计:对父级和子级使用独立或相关状态

Mysql 设计:对父级和子级使用独立或相关状态,mysql,database-design,elasticsearch,architecture,Mysql,Database Design,elasticsearch,Architecture,这是一个设计问题。 我们的系统中有两个实体:活动、分配。一个活动可以分配给多个用户,从而产生多个分配。可以是数万。把它想象成“任务兔”。活动和分配都有一个“状态”字段 显然,当活动“暂停”时,分配也被视为“暂停”。当活动“结束”时,分配也结束 用户需要按状态筛选分配,例如查找所有已结束的分配 问题是, 1活动暂停或结束时,我是否应将分配状态更改为“暂停”|“结束”?亲是,它将很容易做分配过滤。缺点是每个活动可能有10万个任务。根据活动的状态“未执行”批量更新其状态。此外,缓存层不支持批量更新 2

这是一个设计问题。 我们的系统中有两个实体:活动、分配。一个活动可以分配给多个用户,从而产生多个分配。可以是数万。把它想象成“任务兔”。活动和分配都有一个“状态”字段

显然,当活动“暂停”时,分配也被视为“暂停”。当活动“结束”时,分配也结束

用户需要按状态筛选分配,例如查找所有已结束的分配

问题是,

1活动暂停或结束时,我是否应将分配状态更改为“暂停”|“结束”?亲是,它将很容易做分配过滤。缺点是每个活动可能有10万个任务。根据活动的状态“未执行”批量更新其状态。此外,缓存层不支持批量更新

2或者,使分配“状态”完全独立于活动状态。专业的是,现在不需要在活动状态更改时批量更新分配。缺点是,现在对于筛选,我需要首先获取筛选状态的活动的id,然后执行第二次查询,以获得具有额外条件的相应分配:这些筛选id中的活动id


有什么建议吗?

你能改变你对系统的看法吗

显然,当活动“暂停”时,也会考虑分配 “暂停”

您能否将分配的属性视为关系的活动?因此,如果作业暂停,则视为临时删除

在这种情况下,暂停活动时,不应将此暂停状态传播到所有工作分配,因为链接仍保持活动状态,只传递活动状态

更新:

我现在将对我的答案作一点扩展

我的建议是将分配作为一个实体从系统中删除。当然,我不像您那样从内部看到系统,但看起来,您的系统中只有两个实体:用户和活动。分配只是从活动到用户的N:1关系,对吗

此关系本身不是一个实体,但在数据库级别,它将存储在单独的“活动”用户表中,其中包含“用户id”、“活动id”列。但是,您的ORM系统是否允许像Laravel Eloquent那样定义关系属性?因此,该表实际上看起来像用户id、活动id、活动id

当您查询用户的活动时,您可以在活动用户表上执行select,其中active=TRUE


我相信,这解决了状态更新的问题。如果要禁用特定用户的特定活动,请操纵该活动属性,然后由ORM执行此操作。如果您总共禁用活动,则所有用户链接都处于活动状态,但活动已关闭。

对于选项2-您不需要进行两次查询,只需通过简单的联接进行一次查询:选择a.status。。。。。。从分配a加入a.id=c.Assignment\U id上的活动c,其中…..活动可以没有分配吗?可以暂停活动而不暂停分配。当一个或多个任务暂停时,活动能否继续进行?@kordirko,这只适用于MySql。我们收到了来自于老师的作业。对MySql的分页查询相对较慢,因为分配表中有大量行。@草莓,是的,活动可以没有分配。没有人承担这项任务。活动是否暂停与工作分配是否暂停无关。当一个活动的一个或多个工作分配暂停时,该活动可以继续进行。因此,答案是带索引的2。我不知道弹性搜索是什么,但很明显,所有数据都需要在RDBMSVlad中,你是说为赋值添加is_paused属性吗?所以搜索暂停的作业包括获取属于暂停活动的作业,或者_paused=true?@user648922更新了我的答案,并做了一些澄清。