列名 userid 不明确。 表结构_那些你不知道的表结构设计思路

ERP表结构的设计--第9篇

用日志记录“开源软件”的诞生

赤龙ERP开源地址:

点亮星标,感谢支持,与开发者交流 kzca2000

码云:

https://gitee.com/redragon/redragon-erp

GitHub:

https://github.com/redragon1985/redragon-erp

赤龙ERP官网:

https://www.redragon-erp.com

52721417e491e0eddf6c1b52b9013b94.png

前言

上一篇文章说了ERP的系统设计,数据库结构只是一笔带过,今天重点说说我在【赤龙ERP】的表结构里面的都做了哪些特殊的设计,并且为什么这么设计。

ID与编码

我在每一个表几乎无一例外的都增加了两个默认的字段,即ID和Code。这两个字段看似都是可标识数据的唯一性字段,但为什么要设计两个呢?它们当然各有用途。

(1)ID是一个表的主键,一般都是自增的,主要用于排序、定位、查询,由于它是数字所以更清晰、速度更快。

(2)Code是唯一键,类型多是字符。可用UUID或雪花算法等生成。当然在有具体业务场景的情况下,可以由用户输入或按逻辑生成。除了可以具备强语义外,还优先用于外键的关联。

这里做个特殊说明:为什么要用Code做外键,ID也可以做外键啊。外键要具备两个最大的特点:唯一,不可变。ID由于多是自增或由数据库的特质生成,所以不能保证在数据迁移时绝对不变。所以使用Code更安全可靠一些。

组织机构

这个字段名为:org_code,表示组织机构。那什么是组织机构呢?简单说就是独立的公司或主体。作用主要是用于数据隔离,由于没有必要为不同公司建立不同的数据表,所以用一个字段将不同公司的数据隔离开。有点像财务的账套的概念。

操作记录

在每个表都会增加四个字段,用来记录谁在什么时间做了数据操作。分别为:

(1)CREATED_DATE(创建时间)

(2)LAST_UPDATED_DATE(最后修改时间)

(3)CREATED_BY(创建人)

(4)LAST_UPDATED_BY(最后修改人)

创建人和创建时间,在数据新增的时候设置;最后修改人和最后修改时间,在数据更新的时候设置

数据权限

信息化系统都需要数据权限的控制,即什么人可以操作哪些数据。一般企业级信息化,数据权限的逻辑都是在组织架构的层面进行控制的。一般包括:自己操作自己的数据、不同级别部门内的数据可共享、整个公司的数据共享。

为了解决上述的数据权限控制的需要,所以增加一个字段DEPARTMENT_CODE(部门编码)。这个字段只会记录创建当前数据的人所属的部门,即这条数据的所属部门。代码层面再结合数据权限,即可实现数据权限的管控。

版本与日志表

在需要记录数据版本的表中增加VERSION(版本号),常见的业务场景就是“变更功能”。下面举个例子,比如:采购订单变更。当我们创建了一个采购订单,并且审批通过后,这个数据本质是不能修改的,但出现需要修改的时候,我们就需要用上采购订单变更功能。当订单变更时,需要做的就是版本号+1,并且在日志表生成历史数据。

自定义字段

自定义字段的作用是让用户可以根据自己的业务需要增加一个表的字段并保存数据。做法是需要在一个表中增加attribute字段,多数情况下会预留多个attribute字段,字段名attribute1、attribute2、attribute3以此类推。然后再通过可配置的功能来设置attribute字段和字段中文名的对应关系即可。

希望您读完本文可以帮助笔者进入【码云】或【GitHub】搜索“赤龙ERP”点击星标。等待着您的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echart的进阶使用(option)

echart的option进阶使用 1.title: { text: 折线图堆叠subtext: 有一定误差,left: center }title用来配置标题 subtext:副标题 left:位置 2.tooltip: { trigger: axis }图标的提示框组件 trigger(触发方式):axis(坐标轴) item(数据项) 3.legend: {…

python找人_python之找最后一个人

题目大概是:有10个人围成一圈,从第一个人数,数到3的人出局,问最后一个人是谁?围成一圈,那就是无限循环,直至最后一个人,我们可以把10个人看做一个列表,每循环一次就把除3为0的数去除&#xff0…

PCL—关键点检测(rangeImage)低层次点云处理

博客转载自:http://www.cnblogs.com/ironstark/p/5046479.html 关键点又称为感兴趣的点,是低层次视觉通往高层次视觉的捷径,抑或是高层次感知对低层次处理手段的妥协。 ——三维视觉关键点检测 1.关键点,线,面 关键点 …

lombok的使用三部曲及使用中遇到的问题(持续更新)

lombok的使用 1.安装lombok插件 工欲善其事,必先利其器(这一点是不能忘记的,好多小伙伴可能只导入了依赖,却忘了去下载安装插件) 2.导入lombok依赖,看准了千万别倒错 导入依赖,记得更新PoM文件…

python gui 自动化_python GUI测试自动化

#! /usr/bin/env python#codingGB18030GUI测试自动化语言:python模块:pywinauto环境:windows7中文、python-2.6_32bit、pywinauto-0.40、SendKeys-0.3FuncName: pywinauto_notepad.pyDesc: study pywinautoDate: 2017-4-10 10:30Author: 雷小莫_codeHome…

Spring的使用——基础环境搭建以及IOC概念理解(持续更新)

spring基础环境搭建 1.添加Spring依赖 2.编写一个Spring的配置文件 3.通过Spring的应用程序应用上下文获取对象 优点:在修改方案时可以不用修改代码,只需修改配置文件的bean就可以。 spring的基本测试过程 1.获取上下文对象ctx ApplicationContext ctxnew Cl…

Windows10搭建FTP服务器

https://www.cnblogs.com/zjiacun/p/6868457.html 转载于:https://www.cnblogs.com/jonathanyue/p/9301195.html

详细设计说明书示例_专利说明书常用句型汇总

第六课 说明书常用句型1. 以上一般描述和以下的详细说明都只是本发明的示例,并旨在提供概况或框架,用来理解如本发明所主张的本发明的本质和特征。It is to be understood that both the foregoing general description and the following detailed desc…

Please remove usages of `jcenter()` Maven repository from your build scripts and migrate your build

解决步骤如下: 1.打开project下的build.grade 2.将jcenter()注释掉或者直接删除本行代码。 3.sync now

mysql 添加唯一索引_浅谈Mysql索引

文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。我们都知道,数据库索引可以帮助我们更加快速的找出符合的数据,但是如果不使用索引,Mysql则会从第一条开始查询&am…

Flask第一篇——URL详解

原创 2018-02-14 孟船长 自动化测试实战URL是Uniform Resource Locator的缩写,即统一资源定位符。 一个URL通常由一下几个部分组成: scheme://host:port/path/?query-stringxxx#anchor scheme:代表访问协议,一般为http&#xff0…

Linux优盘挂载卸载以及文件查看

1.插入优盘,连接到虚拟机 这一步差点整死我,老弹出这个也没在意,后来查看盘的时候找不到自己的优盘,傻眼了。 如果你的优盘也是3.0接口,那么请看3.0的正确打开方式: 找到虚拟机设置(我这里下载的是8.0版本的Centos&a…

mysql编程_PHP数据库编程之一MySQL优化策略概述

本文简单讲述了PHP数据库编程之MySQL优化策略。分享给大家供大家参考,具体如下:前些天看到一篇文章说到PHP的瓶颈很多情况下不在PHP自身,而在于数据库。我们都知道,PHP开发中,数据的增删改查是核心。为了提升PHP的运行…

mysql六:数据备份、pymysql模块

阅读目录 一 MySQL数据备份 二 pymysql模块 一 MySQL数据备份 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境。但不能恢复到异构系统中如Windows。 #2. 逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句,适用于中…

测试程序运行时间

在初步学习算法的时候&#xff0c;都喜欢一个词叫优化算法&#xff0c;经常做的事情就是比较两个实现同种功能的程序的运行时间。测试运行时间的函数&#xff0c;这就来安利一波。 1.时间函数头文件 #include<time.h> 2.设置初始时间和结束时间的变量。 int begin,end; d…

python权重初始值设置_pytorch自定义初始化权重的方法

在常见的pytorch代码中&#xff0c;我们见到的初始化方式都是调用init类对每层所有参数进行初始化。但是&#xff0c;有时我们有些特殊需求&#xff0c;比如用某一层的权重取优化其它层&#xff0c;或者手动指定某些权重的初始值。核心思想就是构造和该层权重同一尺寸的矩阵去对…

Vim案列掌握vim的基本操作——案例一:vim创建编写txt文件

案例一:vim创建编写txt文件 1.vim创建test.txt文件 vim test.txt 2.输入i,I,a,A,o,O,r,R均可&#xff08;这里以i为例&#xff09; 3.保存文件并退出vim。 a.先返回到一般模式 Esc b.冒号切换到命令行模式 : c.保存文件 :w d.退出vim :q successful 退回界面后可以再次…

Lagom学习 四 CompletionStage

Future: Java 8 之前的 Java 版本功能较弱&#xff0c;仅支持两种用法&#xff1a;要么检查 future 是否已经完成&#xff0c;要么等待 future 完成; Java 8 增加了 CompletableFuture<T> 类&#xff0c;它实现了新的 CompletionStage<T> 接口&#xff0c;并对 Fut…

网络定位-能定位到国家省份市区县街道

代码改变世界 直接上代码 package com.example.baidu;import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast;import com.baidu.location.BDLocation; …

Vim功能键整理(图片来自mooc)

1.一般模式 2.编辑模式 3.命令行模式