[20180309]不好的資料結構設計.txt

lfree發表於2018-03-09

[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教育真的很成問題....

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2151657/,如需轉載,請註明出處,否則將追究法律責任。

相關文章