热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

mysql设计动态字段_数据库设计中动态列的设计方法

问题提出:在进行数据库开发过程中,我们往往会碰到这种情形:如在劳资计算中,对每个人有很多薪酬项目需要汇总计算出工资ÿ

问题提出:

在进行数据库开发过程中,我们往往会碰到这种情形:

如在劳资计算中,对每个人有很多薪酬项目需要汇总计算出工资,如基本工资,计件工资,计时工资,奖金,补贴,代扣等等,但我们在建表的过程中既不能确定薪酬的名称,也不能确定到底有多少个项目,所以在建表的时候面临一个问题,建多少列?起什么名?

下面我以前做过的一个收费系统举例,简单说明一下对于这种情况的处理。

案例情况:

某单位收费系统,现确定收管辖区的暖气费、物业费、治安费、卫生费、收视费、过水热费、热水费、房租、水电费、摊位费、商铺租金十一个收费项目,但客户提出有可能增加垃圾清运费、绿化费等一些现在还未确定的费用以及将来可能要增加的收费项目。

实现目标:

根据案例情况,我们必须要考虑动态设计列,而不是在客户需增加列的时候去直接修改数据库表结构。

实现方法:

采用列映射为行的处理方法,将无意义但有规律的列名映射出无规律但有意义的行。

实现步骤(设计工具 PowerDesigner9.5 数据为MS SqlServer2000):

一、              确定项目最多几项

收费项目具体有多少项目,因为存在变数,我们不能确定,但最多不会超过多少项目,虽然我们仍然没办法确定,但这个是可以估计的。通过综合分析系统使用对象的实际情况以及系统的生命周期,像这种临时或将要增加的收费项目不会超过现有确定的项目的一半,所以在本系统估计最大收费项目会月16列。(注意:增加的收费项目不会超过现有确定的项目的一半,仅仅是指这个案例,具体问题具体分析)。

二、              建立项目信息表

建立一个用来存储项目(列)信息的表,表结构如下:

bfeb11297c33976414c72f6a85edce3a.png

数据内容如下:

b9392ca86688dc7a9919c650bd06dc99.png

这样,我们就用这个项目信息表把每个项目对应的列名确定下来了,或者说,在别的表中相应的列名对应的收费项目就确定下来了。

我们在需要变更收费项目名称或增减收费项目时只需修改表中类别名称即可。

在这个表中还可以根据实际情况保存一些额外的信息,如增加计算公式列,对公式C13=C1+C5,行号为13的公式列可以保存C1+C5,这仅仅是一个简单的例子,可以跟据实际情况保存很多扩展信息。

一、              使用项目信息表

我们建立的项目信息表,主要是为了在所有使用这些收费项目的其它表中使用。比如我们我们另一个表代扣项目设置表(设置哪些收费项目由交费用户所在单位代扣),表结构如下:

0052bc19cbbbda657cd04291204bc57e.png

数据表中数据表示次单位是否代扣此项目,如单位编码为001的单位,DK_C01为1表示001单位代扣暖气费,为0表示不代扣。

其它别的比如收费信息表(存储收费用户个人收费信息),个人收费项目表(存储收费用户个人有哪些收费项目)等表中均可使用类似定义列,我们在做数据库操作的时候,可动态使用列名,如收费信息表中,存储费用信息的列为FY_C01…FY_C16,我们计算此用户总费用时可使用循环累加,列名由循环变里动态组合而成,如”FY_C”+循环变量处理形式表示。

方案优缺点:

优点:1、能够灵活的设置项目(具有共性的多个分类)的名称或表示形式,而不受数据库实际列的限制,而且能夠方便的进行修改。

2、在进行数据处理时能根据某种规律动态生成列名而读取或更新数据。

缺点:如不能正确估计项目最多有几项,会导致需修改多个表。

注:这篇文章是我以前做过一个项目中实际碰到实际问题,我只是最近闲下来做了个整理,其实是一个很简单的处理方式,不是写给高手看的,只是希望对碰到问题类似问题的朋友做一参考。

————————————————

版权声明:本文为CSDN博主「chaihuo」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/chaihuo/article/details/1631680



推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
author-avatar
鱼鱼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有