首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >根据更新频率将可审计表拆分为两个表是个好主意吗?

根据更新频率将可审计表拆分为两个表是个好主意吗?
EN

Database Administration用户
提问于 2020-10-01 10:15:23
回答 1查看 100关注 0票数 0

我目前正在为一个处理产品的小型微服务设计一个数据库模式。

该服务包含一个简单的REST (允许用户执行产品的基本管理)和另一个API (用于执行使用这些产品的操作)。使用显式定义的消耗品计数,每个产品的最大消耗量是有限的。当达到这个限制时,产品就不能再消费了。每个产品通常包含约1,000 - 1,000,000件消耗品,而一次操作一次可消耗1- 10件消耗品。

管理操作的频率较低,但消耗率很高。

目前,模式将所有产品信息放入一个表中。此表还包含必须审计到每个插入、更新和删除操作的基于快照的历史记录表中的信息。目前,这是使用DB触发器完成的,这些触发器知道如何向历史表中添加行以及其他审计信息。每一种消耗品使用都会在消耗品表中添加一个新行,并提供与其使用方式有关的其他信息。

下面是一个关于这些表当前组织方式的简化示例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
------------------------
| product              |
------------------------
| + id                 |
| + name               |
| + is_enabled         |
| + consumable_limit   |
| + consumable_counter |
| ...10 omitted fields |
------------------------

------------------------
| product_history      |
------------------------
| + id                 |
| + product_id         |
| + time               |
| + user_id            |
| + history_type       |
| + name               |
| + is_enabled         |
| + consumable_limit   |
| + consumable_counter |
| ...10 omitted fields |
------------------------

------------------------
| operations           |
------------------------
| + id                 |
| + product_id         |
| + consumable_idx     |
| ...10 omitted fields |
------------------------

在上面的图表中,我省略了一些字段以使事情更简单。这里让我感到奇怪的是,产品表中的consumable_counter会通过消费操作快速更新,这可能会进一步淹没product_history表。如果每次更新consumable_counter时都不会触发产品表行的完整快照,那么是否最好将可消费计数器移动到另一个表中?不知何故,我觉得它可能是理想的,因为consumable_counter是产品表中唯一正在以高速率更新的列。每个计数器增量的完整快照不知怎么感觉有点过火了。

编辑

consumable_counter充当相应产品被使用多少次的计数器。当它到达consumable_limit时,产品就不能再消费了。

编辑

每次使用产品时,都会在操作表中添加一个新条目。此表中的条目还充当业务逻辑事务,其中包含将在操作执行流程期间管理的状态。

EN

回答 1

Database Administration用户

发布于 2020-10-04 04:34:08

我认为你的评估方向是正确的。你确实捕获了太多的信息。根据你的描述,我认为你描述的是一个消费事件,而不是产品历史。

我的建议是将消费属性从PRODUCT_HISTORY表中分割成一个新表。如果不知道省略的列,我就无法提供建议。以下是一些想法:

  • 如果" name“列是产品的名称,则这不会随消费事件而改变,应该保留在产品历史记录中。
  • consumption_limit可能需要在产品历史记录和消费事件表中。您可能需要知道消费发生时的限制是什么,限制可能会随着时间的推移而改变,因此应该将这一事实记录在产品历史表中。
  • 可能需要在消费事件和操作表之间建立关系。

操作表中的一行描述单个操作的集合(可能有一个操作表),还是单个操作?这是一个重要的细节,以确定与消费事件的关系。如果是单数,我建议您重命名该表。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/276410

复制
相关文章
MYSQL 中间件分表是一个好主意?
中间件分表是不是一个好的主意?通过中间件来对MYSQL的数据进行分表是一个常见的对于大数量的解决的方案,通过中间件将应用的数据在中间层进行路由,通过路由将一张表的数据,映射到不同物理数据库上的表,通过应用设计的分片键将数据根据规则存储在不同的物理服务器上。实际上分布式数据库的基本原理也是这样。
AustinDatabases
2021/11/10
3130
MYSQL  中间件分表是一个好主意?
将一个工作表拆分为多个工作表
最近已经不止一次被人问到:怎么将一个工作表拆分为多个工作表?一般这样的需求,是因为将1-12月的数据写在了一个工作表上,而现在又想将它拆分为12个单独的工作表,每个工作表单独一个月份.总结了一下,文艺
但老师
2022/03/22
4.4K0
将一个工作表拆分为多个工作表
sql server 更新两个表的某个字段
--临时表 create table tmp_cup ( a varchar(20), b varchar(50), c varchar(20) ) select * from t_customer --//更新简称字列 update t_customer set SHORTNAME=(select shortname from tmp_cup where a=custid) 不过如此的话, 如果子查询的某个查询返回多条数据的话就有可能报错:消息 512,级别 16,状态 1,
乔达摩@嘿
2020/09/11
2.1K0
MYSQL根据一张表的数据更新另外一张表
方式一:update 更新表 set 字段 = (select 参考数据 from 参考表 where  更新表.id = 参考表.id)
Power
2025/03/05
910
ABAP 取两个内表的交集 比较两个内表的不同
SAP自带的函数: CTVB_COMPARE_TABLES和BKK_COMPARE_TABLES; 似乎可以比较两个内表,得出第二个内表不同于第一个内表的部分(新增/删除了那些部分) 但是,具体的使用,还请有经验的朋友不吝赐教啊! 因为,我在测试数据时,发现这两个函数的效果不那么简单。 如果上述函数确实可以,提取两个内表不同部分,则我可以据此做两次比较,得到两个内表的交集。 所以,我先用另外一种方式解决了-自己写了一个提取两个内表交集的函数,供大家检阅: *" IMPORTING *" VALUE(ITAB1) TYPE INDEX TABLE *" VALUE(ITAB2) TYPE INDEX TABLE *" EXPORTING *" VALUE(ITABSAME) TYPE INDEX TABLE *"---------------------------------------------------------------------- field-symbols: <S1>, <S2>. data: L1 type i, L2 type i. assign local copy of initial line of: ITAB1 to <S1>, ITAB2 to <S2>. describe: table ITAB1 lines L1, table ITAB2 lines L2. "对记录行数少的内表,执行第一层循环; "在第二层循环中,找到对应记录,即可追加到结果内表; "同时退出第二层循环,继续执行第一层循环的下一行 IF L1 <= L2. LOOP AT ITAB1 INTO <S1>. LOOP AT ITAB2 INTO <S2>. IF <S1> EQ <S2>. APPEND <S1> TO ITABSAME. EXIT. ENDIF. ENDLOOP. ENDLOOP. ELSE. LOOP AT ITAB2 INTO <S2>. LOOP AT ITAB1 INTO <S1>. IF <S1> EQ <S2>. APPEND <S2> TO ITABSAME. EXIT. ENDIF. ENDLOOP. ENDLOOP. ENDIF. ENDFUNCTION. 另一个问题,想请教大家,在上面代码里,第二层循环是为了找出,第一层循环的当前记录,在第二个内表里是否存在;
matinal
2020/11/26
3.1K0
组合两个表(C++)
编写一个SQL查询来报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为空 null 。
GeekLiHua
2025/01/21
400
sql优化:组合两个表
第一:主要是显示person表里面的数据的话,如果是(left join)左连接就把person放在左边,如果是(right join)右连接,就把person放在右边。 第二:因为表 Address 中的 personId 是表 person 的外键,所以我们可以连接这两个表来获取一个人的地址信息。 那问题来了,什么是外键呢? 某一个表的主键是另一张表的某个普通的字段。那就叫外键.双方类型必须一致哦.
贵哥的编程之路
2021/09/08
9270
SqlServer 循环建表、删除表、更新表
常用于分库分表 1、批量删除 declare @outter int declare @inner int declare @tablePrefix varchar(30) declare @tableName varchar(36) set @outter=1 set @inner=0 while (@outter<=12) begin set @tablePrefix='BankPayOrder_'+convert(varchar,@outter)+'_' while(@inner<=9) beg
郑小超.
2019/01/07
2.8K0
R语言入门之频率表和列联表
‍‍‍‍‍‍在这一期我们将要学习如何针对分类变量数据创建频率表和列联表,之后在此基础之上进行独立性检验、关联度测量以及相关数据的可视化。
生信与临床
2020/08/06
2.7K0
R语言入门之频率表和列联表
把数据库放入Docker是一个好主意吗?
将数据库放入 Docker 容器的决定需要考虑多个因素,其中包括应用的规模、性能需求、环境一致性、团队的技术经验等。以下是对将数据库放入 Docker 的一些优势和潜在缺点的更详细阐述:
coderidea
2023/12/11
3380
把数据库放入Docker是一个好主意吗?
【Leetcode】175. 组合两个表
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:
Leetcode名企之路
2018/11/29
1.1K0
Django 分表的两个方案
这个问题戳到了Django ORM的痛点,对于多数据库/分库的问题,Django提供了很好的支持,通过using和db router可以很好的完成多数据库的操作。但是说到分表的问题,就有点不那么友好了。但也不是那么难处理,只是处理起来不太优雅。
the5fire
2019/03/01
3.3K2
把数据库放入Docker是一个好主意吗?
将数据库放入 Docker 容器的决定需要考虑多个因素,其中包括应用的规模、性能需求、环境一致性、团队的技术经验等。以下是对将数据库放入 Docker 的一些优势和潜在缺点的更详细阐述:
coderidea
2023/12/11
4900
把数据库放入Docker是一个好主意吗?
LeetCode-175. 组合两个表
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:
悠扬前奏
2019/05/28
3930
Leetcode No.175 组合两个表
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:
week
2021/05/06
3260
根据SQL提炼表信息
在MySQL慢日志通过pt工具解析后有一个小问题,那就是我们很难得到一个完整的table列表,即假设一条SQL语句很长,那么我们其实想知道这条SQL相关的表是哪几个,如果能够很清晰的提炼出来,那么我们要做后续的分析就会锦上添花。
jeanron100
2019/05/08
4780
怎么把两个excel表合成一个表合并保持相同数据
根据数据内容不同,我们会设置不同的excel表,但是如果它们之间还存在着同样的内容,为了方便查看,可以把它们放在同一个表格里进行编辑,今天我们带来的课程是:怎么把两个excel表合成一个表并合并相同数据。
学派客
2023/04/06
6K0
怎么把两个excel表合成一个表合并保持相同数据
什么是窄表?什么是宽表?
在数据库中,窄表和宽表是两种设计思想,分别指的是列数少或者列数多的表格。
逍遥壮士
2023/09/01
2.9K0
什么是窄表?什么是宽表?
表驱动分为三种,分别是:直接索引、索引表、阶梯索引
表驱动分为三种,分别是:直接索引、索引表、阶梯索引。一般直接索引使用比较广泛,也容易想到。今天在网上看到了一笔试题,统计一个字符串中第一次出现且频率最高的字符。看到这道题以后,我觉得使用表驱动能很快、很容易地解决问题,下面是我使用表驱动给出的解法。
用户4766018
2022/08/19
2190
关联表更新封装
凭自己的本事和正当手段挣来的钱财,可以使我们赢得道义和幸福——阿基兰 分享一个关联更新函数 package com.ruben.simplestreamquery.util; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.ruben.simplestreamquery.pojo.bo.RelationBO; import io.g
阿超
2023/03/16
1.1K0

相似问题

合并这两个表是个好主意吗?

10

什么是审计表?

40

使用个人号码作为客户表的主键是个好主意吗?

20

为身份验证目的拆分“用户”表是个好主意吗?

30

Oracle统一审计更新表

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文