[20180309]不好的数据结构设计.txt

简介: [20180309]不好的数据结构设计.txt --//昨天检查生产系统,看到一个表段增长很快.仔细检查发现是正常的,但是表结构设计存在问题. 1.环境: xxxxx> @ &r/ver1 PORT_STRING                    VER...

[20180309]不好的数据结构设计.txt

--//昨天检查生产系统,看到一个表段增长很快.仔细检查发现是正常的,但是表结构设计存在问题.

1.环境:
xxxxx> @ &r/ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

xxxxx> @ &r/desc XXXXXX_YYY.MS_RECIPE_SIGN
           Name                            Null?    Type
           ------------------------------- -------- ----------------------------
    1      CFSB                            NOT NULL NUMBER(18)
    2      RECIPE_CAKEY                             VARCHAR2(2000)
    3      RECIPE_CFCA                              VARCHAR2(3000)
    4      PHARMACY_PYR_CAKEY                       VARCHAR2(2000)
    5      PHARMACY_PYR_CFCA                        VARCHAR2(3000)
    6      PHARMACY_FYR_CAKEY                       VARCHAR2(2000)
    7      PHARMACY_FYR_CFCA                        VARCHAR2(3000)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    8      RECIPE_CFCA_TSS                          VARCHAR2(3000)
    9      RECIPE_CFYW                              VARCHAR2(2000)
   10      PHARMACY_PYR_CFCA_TSS                    VARCHAR2(3000)
   11      PHARMACY_PYR_CFYW                        VARCHAR2(2000)
   12      PHARMACY_FYR_CFCA_TSS                    VARCHAR2(3000)
   13      PHARMACY_FYR_CFYW                        VARCHAR2(2000)

--//下划线的字段估计应该是最近增加的.

xxxxx> select * from dba_objects where object_name='MS_RECIPE_SIGN';
OWNER  OBJECT_NAME          SUBOBJECT_  OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         CREATED             LAST_DDL_TIME       TIMESTAMP           STATUS  T G S  NAMESPACE EDITION_NAME
------ -------------------- ---------- ---------- -------------- ------------------- ------------------- ------------------- ------------------- ------- - - - ---------- ------------------------------
PORTAL MS_RECIPE_SIGN                      108097         108097 TABLE               2015-07-22 09:51:42 2017-11-14 09:09:14 2017-11-14:09:09:15 VALID   N N N          1

--//很明显2017-11-14 09:09:14修改了数据结构,增加6个字段.

xxxxx> select * from DBA_COL_COMMENTS where table_name='MS_RECIPE_SIGN' and comments is not null;
OWNER      TABLE_NAME       COLUMN_NAME            COMMENTS
---------- ---------------- ---------------------- -------------------
XXXXXX_YYY MS_RECIPE_SIGN   RECIPE_CFCA_TSS        处方时间 戳签名值
XXXXXX_YYY MS_RECIPE_SIGN   RECIPE_CFYW            处方原文
XXXXXX_YYY MS_RECIPE_SIGN   PHARMACY_PYR_CFCA_TSS  配药人时间戳签名值
XXXXXX_YYY MS_RECIPE_SIGN   PHARMACY_PYR_CFYW      配药人 处方原文
XXXXXX_YYY MS_RECIPE_SIGN   PHARMACY_FYR_CFCA_TSS  发药人时间戳签名值
XXXXXX_YYY MS_RECIPE_SIGN   PHARMACY_FYR_CFYW      发药人 处方原文
6 rows selected.
--//注:有6个字段有说明,也说明是最近一段时间增加的.因为以前不要求开发增加字段说明,我多次强调,许多开发以后根本不知道这些字段的含义.
--//特别是一些表示状态的字段.更滑稽可笑我要求尽量完善字段的说明时,领导给我的建议遇到不懂的时候问开发,无语,我每天没事看,天天问人家
--//那个字段表示什么意思吗?再说,许多情况下开发根本不清楚,而且我曾经提交文档,仅仅需要知道经常access的表,已经缩小了范围.

--//一个处方,经历N多人的签名认证,才有效.

2.应该这样设计:

MS_RECIPE_SIGN 修改如下:

CFSB                            NOT NULL NUMBER(18)
CA_TYPE                         NOT NULL VARHCAR2(1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RECIPE_CAKEY                             VARCHAR2(2000)
RECIPE_CFCA                              VARCHAR2(3000)
 
--//增加1个字段CA_TYPE. 说明是CAKEY类型: 比如'1' 表示 RECIPE, '2' 表示 PHARMACY_PYR , '3' 表示 PHARMACY_FYR.
--//再增加一个表MS_RECIPE_TSS.

MS_RECIPE_TSS表结构设计如下:

CFSB                            NOT NULL NUMBER(18)
TSS_TYPE                        NOT NULL VARCHAR2(1)
RECIPE_CFCA_TSS                          VARCHAR2(3000)
RECIPE_CFYW                              VARCHAR2(2000)

--//TSS_TYPE ,说明TSS的类型. 比如'1' 表示 RECIPE_CFCA, '2' 表示 PHARMACY_PYR_CFCA, '3' 表示 PHARMACY_FYR_CFCA.
--//变原来的插入后不断修改为不断的插入操作,避免大量的行链接以及行迁移.而且还可以把这些表放入单独的32K表空间.节约磁盘空间.

--//可惜,一旦这样设计修改许多困难,真不知道开发关系数据库如何学的.连最基础的东西都没学好,写什么狗屁程序....
--//更大的问题,许多表结构都像上面那样设计,无语啊无语....

--//国内的IT教育真的很成问题....

目录
相关文章
|
4月前
|
存储 Java 索引
Java数据结构:选择合适的数据结构解决问题
Java数据结构:选择合适的数据结构解决问题
|
存储 算法 NoSQL
第八章 查找【数据结构】3
第八章 查找【数据结构】3
71 0
|
6月前
|
存储 算法 前端开发
第八章 查找【数据结构】【精致版】
第八章 查找【数据结构】【精致版】
72 0
|
11月前
|
存储 安全 Java
【C++】引用之带你“消除”C语言版数据结构教材的一些困惑(虽然是C++的内容,但是强烈建议正在学习数据结构的同学点进来看看)
【C++】引用之带你“消除”C语言版数据结构教材的一些困惑(虽然是C++的内容,但是强烈建议正在学习数据结构的同学点进来看看)
68 0
|
存储 算法 前端开发
第八章 查找【数据结构】1
第八章 查找【数据结构】1
83 0
|
存储 算法 Serverless
第八章 查找【数据结构】2
第八章 查找【数据结构】2
79 0
|
算法 C++
C++基础代码--20余种数据结构和算法的实现
C++基础代码--20余种数据结构和算法的实现
180 0
|
存储 人工智能 算法
我爱啃书--单链表的整表创建删除和优点(大话数据结构)
我爱啃书--单链表的整表创建删除和优点(大话数据结构)
80 0
|
机器学习/深度学习 算法
我爱啃书--算法概述(大话数据结构)
我爱啃书--算法概述(大话数据结构)
92 0
数据结构7-回顾与补充
数据结构7-回顾与补充
57 0
数据结构7-回顾与补充