MYSQL,如何设计一个“ add0remove”用户设置表?

问题描述

我目前正在为新应用设计一个设置表。有一个设置“ add0remove”,这意味着用户是从特定的“定位”中添加还是被排除。接下来,我创建了“ user / list_add0remove”表,以按设置保存所有添加或删除的用户/用户列表。

我特别担心“ user / list_add0remove”表:假设有3,000个设置,每个设置平均添加100个不同的用户。结果,“ user / list_add0remove”表将随着时间的推移而变得庞大,查询可能需要一些时间。 (应用用例无法保存“某些定位”并随着时间的推移再次重复使用)

如何解决?通常,是否优化下表架构?

Visual Schema

如果要向当前新闻通讯目标添加或删除用户,可以在“管理员新闻通讯设置”中选择。

“ add0remove”表示 0 =删除或 1 =添加。

例如,我将时事通讯的目标受众定为来自意大利的所有用户,但希望从意大利移除某些用户或添加意大利以外的其他用户。

解决方法

根据您的评论,这就是我的理解。

  1. 一个设置可以有0到N个用户。

  2. 用户可以设置零到N个设置。

  3. 一个列表可以有0到N个用户。

  4. 用户可以属于零到N个列表。

  5. 列表是一种将具有共同兴趣的多个用户分组的便捷方法。

  6. 可以将列表添加到设置。列表永远无法从设置中删除。

因此,我要做的第一件事是将设置与用户相关联。

Setting
-------
Setting ID
Setting Name
...
Setting Create Timestamp
Setting Update Timestamp


User
----
User ID
User Name
User Email
User Gender
User Birthdate
User Create Timestamp
User Update Timestamp


SettingUser
-----------
Setting ID
User ID
SettingUser Create Timestamp
SettingUser Update Timestamp

SettingUser关联表在设置ID(用户ID)上具有唯一索引。您还可以在用户ID(设置ID)上具有唯一索引。第二个索引使您可以获取与用户关联的设置的列表。

在SettingUser关联表中不需要添加或删除标志。如果该行存在,则将用户与设置关联。如果该行不存在,则表明该用户与该设置没有关联。

如果您需要跟踪已删除的用户,请向SettingUser关联表中添加一个布尔标志,以标记哪些行已被“删除”。

您的数据库不必看起来像您的GUI。您的数据库必须与GUI一起使用。您的应用程序代码将GUI输入转换为可以存储在数据库中的数据。您的应用程序代码会将数据库中的数据转换为在GUI上显示的输出。

列表与用户的关系类似。

List
----
List ID
List Name
List Create Timestamp
List Update Timestamp


ListUser
--------
List ID
User ID
ListUser Create Timestamp
ListUser Update Timestamp

ListUser关联表的推理与SettingUser关联表的推理相似,因此我不再重复。

数据库中的列表和设置之间没有连接。由应用程序代码来检索与“列表”关联的用户并将其与适当的设置行关联。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...