因数据表字段设计引发的技术部严重内卷

img

_今天过表如上图:是否启用,是否需要确认,如图选框✅表示是启用没有选择表示未启用,灰色表示不可修改和普通颜色表示是可修改_


#观点一
认为设计表时两个字段可以就可以: is_enabled,is_confirm,值如下 0:否 1:是 2:是且不可修改 3:否且系统不可修改

#观点二:
需要四个字 is_enabled 值 0 未启用 1启用 is_enabled_write 启用字段是否可以修改 0 不可修改 1 可修改 is_confirm 值 0 不需确认 1需要确认 is_confirm_wirte 确认字段是否可以修改 0 不可修改 1可修改

上面两个观点讨论了好久,各位觉得哪种设计合理,帮忙提提意见

到底是2个字段还是4个字段,各有各的合理性
说2个字段简单,那只是数据库层面看起来少写2个字段
但是你要考虑到实际使用的时候是什么情况
很多地方读取权限,它只读取并不修改,它只想知道当前状态到底是启用还是不启用
那么1和3表示启用,2和0表示不启用,显然是为这些地方的使用增加难度
那么到底是去修改这个权限的页面多,还是使用这个权限的页面多,还是一样多
根据不同的业务,你要选择最合理的方法,而不能只局限于数据库里多和少

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7752318
  • 这篇博客你也可以参考下:充值核销卡密恶意并发请求防止重复利用卡密充值成功解决方案
  • 除此之外, 这篇博客: 索引优化与查询优化中的 索引失效案例(这下面失效都不是绝对,是查询优化器基于对成本的考虑决定的。) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • MySQL中提高性能的一个最有效的方式是对数据表设计合理的索引。索引提供了高效访问数据的方法,并且加快查询的速度,因此索引对查询的速度有着至关重要的影响。

    • 使用索引可以快速地定位表中的某条记录,从而提高数据库查询的速度,提高数据库的性能。
    • 如果查询时没有使用索引,查询语句就会扫描表中的所有记录。在数据量大的情况下,这样查询的速度会很慢。

    大多数情况下都(默认)采用B+树来构建索引。只是空间列类型的索引使用R-树,并且MEMORY表还支持hash索引。

    其实,用不用索引,最终都是优化器说了算。优化器是基于什么的优化器?基于cost开销(CostBaseOptimizer),它不是基于规则(Rule-BasedOptimizer),也不是基于语义。怎么样开销小就怎么来。另外,SQL语句是否使用索引,跟数据库版本、数据量、数据选择度都有关系。

  • 您还可以看一下 魏老师老师的从零搭建英伟达平台远程开发调试环境课程中的 远程启动需要图形解码的应用程序以及开机启动部署小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    针对问题中提到的两个设计观点,下面给出我对每个观点的想法和建议:

    1. 分页查询方式: 根据参考资料中的测试结果,分页查询方式在查询记录量较大或查询偏移量较大时,会拖慢总查询速度。因此,我建议可以采用以下优化方案:
    2. 使用游标分页查询:使用游标可以避免从第一条记录开始扫描,可以直接根据游标定位到指定记录,提高查询效率。具体实现方式示例代码如下:
    DECLARE cursor CURSOR FOR
    SELECT * FROM orders_history WHERE type=8 ORDER BY id;
    OPEN cursor;
    
    DECLARE @offset INT = 0;
    DECLARE @pageSize INT = 100;
    
    FETCH ABSOLUTE @offset cursor;
    
    WHILE @@FETCH_STATUS = 0 AND @offset < @pageSize
    BEGIN
        -- 处理当前记录
        -- ...
    
        SET @offset = @offset + 1;
        FETCH NEXT FROM cursor;
    END;
    
    CLOSE cursor;
    DEALLOCATE cursor;
    
    1. 跨库关联查询问题: 跨库关联查询会增加查询的复杂性和性能消耗。为了优化跨库查询,可以考虑以下方案:
    2. 维护一份文件索引:将需要跨库查询的数据维护在一个共享的文件中,通过文件索引来进行查询。这样可以避免直接在数据库上进行跨库查询,提高查询性能。
    3. 使用冗余字段避免跨库查询:在需要频繁进行跨库查询的字段上,考虑在目标库中冗余一份数据。这样可以避免直接跨库查询,减少查询的复杂性和性能消耗。

    综上所述,以上是我对问题的分析和解决方案建议。

这个要看你的业务逻辑了,是否允许修改,这个要看需求。
但是我个人倾向,(1)如无必要勿增实体(2)我会考虑用一个枚举值表示是否启用和是否确认,每个二进制位表示一个开关量
好处在于,让这个值原子化,级你不是4个布尔值的全部排列组合都是有效的状态吧,如果弄出多个字段,就可能造成状态的不统一。