数据字典解决方案和存储过程设计

简介: 数据字典解决方案和存储过程设计

开发企业应用时,不使用ORM工具框架时,自行建立一个数据字典表,用于设置标题、控件、显示格式等设计,也是一个可行的办法。

一、前端编辑界面(桌面)

这是内容编辑界面。

二、数据字典

X9_SJZD字段列表:

ID        int           4 键号            TextEdit          
TNAME     varchar      20 数据表名          TextEdit          
ZDBB      varchar      20 字典版本          TextEdit          
FXH       int           4 序号            TextEdit          
FNAME     varchar      20 字段名称          TextEdit          
FTYPE     varchar      50 类型            TextEdit          
FLEN      int           4 长度            TextEdit          
FPREC     int           4 有效数字          TextEdit          
FSCALE    int           4 小数位数          TextEdit          
FMEMO     nvarchar     60 标题            TextEdit          
FZMC      nvarchar     20 分组名称          TextEdit          
SRLX      nvarchar     20 输入类型          TextEdit          
BYXM      bit           1 必要项目          CheckEdit         
HSXM      bit           1 整行项目          CheckEdit         
ALIGNMENT int           4 对齐            TextEdit          
EDIT      varchar      50 控件            TextEdit          
FORMATTYPE  varchar      50 格式类型          TextEdit          
FORMATSTR varchar     100 格式字符          TextEdit          
MASKTYPE  varchar      50 掩码类型          TextEdit          
MASKSTR   varchar     100 掩码字符          TextEdit          
SUMTYPE   varchar      20 摘要类型          TextEdit          
SUMFMT    varchar      30 摘要格式          TextEdit          
SEARCH    nvarchar    400 上网搜索          TextEdit          
TOOLTIP   nvarchar    240 操作提示          TextEdit      

三、当前端访问某一表时,执行初始过程代码(MS SQLSERVER)

CREATE PROCEDURE [dbo].[X9_ZRSJZD] 
   (@ZDBB VARCHAR(20),    
  @TBMC VARCHAR(20),    
  @SFGX INT)  
AS 
BEGIN TRY   
  SET NOCOUNT ON; 
  IF @SFGX=1
    BEGIN    
      --插入新行
      INSERT INTO X9_SJZD  (TNAME,ZDBB, FNAME, FXH, FTYPE,FLEN,FPREC,FSCALE)
        SELECT    OBJECT_NAME(OBJECT_ID) , @ZDBB AS ZDBB, NAME, COLUMN_ID, TYPE_NAME(SYSTEM_TYPE_ID) ,
            MAX_LENGTH ,PRECISION,SCALE
          FROM   SYS.COLUMNS WHERE  OBJECT_NAME(OBJECT_ID)=@TBMC AND NAME<>'X9STAMP' 
            AND ((OBJECT_NAME(OBJECT_ID)+@ZDBB+NAME) NOT IN  (SELECT TNAME+ZDBB+FNAME AS ZDHH 
            FROM  X9_SJZD AS X9_SJZD_1));
      --删除多余行
      DELETE FROM X9_SJZD WHERE TNAME=@TBMC AND FTYPE='BINARY';
      DELETE FROM X9_SJZD  WHERE TNAME=@TBMC AND  ((FNAME) NOT IN  
        (SELECT  NAME AS FNAME  FROM  SYS.COLUMNS WHERE OBJECT_NAME(OBJECT_ID)=@TBMC));
    END
  IF @SFGX=2
    BEGIN    
      --删除所有行
      DELETE FROM X9_SJZD  WHERE TNAME=@TBMC AND ZDBB=@ZDBB;
      --插入所有行
      INSERT INTO X9_SJZD  (TNAME,ZDBB, FNAME, FXH, FTYPE,FLEN,FPREC,FSCALE)
        SELECT    OBJECT_NAME(OBJECT_ID) , @ZDBB AS ZDBB, NAME, COLUMN_ID, 
          TYPE_NAME(SYSTEM_TYPE_ID) ,MAX_LENGTH ,PRECISION,SCALE
          FROM   SYS.COLUMNS WHERE  OBJECT_NAME(OBJECT_ID)=@TBMC AND NAME<>'X9STAMP' 
            AND ((OBJECT_NAME(OBJECT_ID)+@ZDBB+NAME) NOT IN  
            (SELECT TNAME+ZDBB+FNAME AS ZDHH FROM  X9_SJZD AS X9_SJZD_1));
    END
  --更新相关信息   
  UPDATE X9_SJZD SET  FXH = SYS.COLUMNS.COLUMN_ID,  FTYPE = TYPE_NAME(SYSTEM_TYPE_ID),FLEN=MAX_LENGTH,FPREC=PRECISION,FSCALE=SCALE
    FROM X9_SJZD INNER JOIN      SYS.COLUMNS ON X9_SJZD.TNAME = OBJECT_NAME(SYS.COLUMNS.OBJECT_ID) AND 
      X9_SJZD.FNAME = SYS.COLUMNS.NAME   
    WHERE  TNAME =@TBMC AND ZDBB=@ZDBB ;   
  --设置缺省   
  UPDATE X9_SJZD SET FORMATTYPE=(CASE UPPER(FTYPE)  WHEN 'DECIMAL' THEN 'Numeric' WHEN 'NUMERIC' THEN 'Numeric'  
      WHEN 'DATETIME' THEN 'DateTime'  ELSE '' END), FORMATSTR =(CASE FTYPE  WHEN 'DECIMAL' THEN 'N2' 
      WHEN 'NUMERIC' THEN '0.'+REPLICATE ('0',FSCALE)   WHEN 'DATETIME' THEN 'YYYY-MM-DD'   ELSE '' END)  
    WHERE TNAME =@TBMC AND ZDBB=@ZDBB AND FORMATSTR =''  ;   
  UPDATE X9_SJZD SET SRLX=(CASE UPPER(FTYPE)  
      WHEN 'CHAR' THEN '文本'  WHEN 'NCHAR' THEN '文本'  WHEN 'TEXT' THEN '文本'  
      WHEN 'NTEXT' THEN '文本'   WHEN 'VARCHAR' THEN '文本'  WHEN 'NVARCHAR' THEN '文本'  
      WHEN 'INT' THEN '整型'  WHEN 'SMALLINT' THEN '整型'      WHEN 'BIGINT' THEN '整型'      
      WHEN 'DECIMAL' THEN '数值'    WHEN 'NUMERIC' THEN '数值'   WHEN 'FLOAT' THEN '数值'  WHEN 'REAL' THEN '数值'      
      WHEN 'DATE' THEN '日期时间'     WHEN 'DATETIME' THEN '日期时间' WHEN 'DATETIME2' THEN '日期时间'  
      WHEN 'SMALLDATETIME' THEN '日期时间'      WHEN 'DATETIMEOFSET' THEN '日期时间'  WHEN 'TIME' THEN '日期时间'  
      WHEN 'BIT' THEN '逻辑'   
      WHEN 'BINARY'  THEN '对象'  WHEN 'VARBINARY'  THEN '对象'  WHEN 'IMAGE' THEN '对象'      
        ELSE '' END)    
    WHERE  X9_SJZD.TNAME =@TBMC AND X9_SJZD.ZDBB=@ZDBB;   
  UPDATE X9_SJZD SET ALIGNMENT =5 WHERE (FNAME='ID' OR FNAME='OID' OR FNAME='MID' OR FNAME='MHH' OR EDIT='CheckEdit' ) 
      AND TNAME =@TBMC AND ZDBB=@ZDBB;   
  --更新为近似值 
  DECLARE @GXID INT;
  DECLARE @ZDID INT,@ZDFNAME VARCHAR(20),@ZDFTYPE VARCHAR(20),@ZDFLEN INT;
  DECLARE SJZD_cursor CURSOR LOCAL FOR
    SELECT ID,FNAME,FTYPE,FLEN FROM X9_SJZD 
    WHERE TNAME =@TBMC AND ZDBB=@ZDBB AND (FMEMO='' OR EDIT='');
  OPEN SJZD_cursor;
  FETCH FROM SJZD_cursor
    INTO @ZDID,@ZDFNAME,@ZDFTYPE,@ZDFLEN;
  WHILE @@FETCH_STATUS=0
    BEGIN
      SET @GXID=0;
      SELECT TOP 1 @GXID=ID FROM X9_SJZD 
        WHERE TNAME=@TBMC AND FNAME=@ZDFNAME AND FTYPE=@ZDFTYPE AND 
          FLEN=@ZDFLEN AND FMEMO<>'' AND EDIT<>'' ORDER BY ID DESC;
      IF @GXID=0
        BEGIN
          SELECT TOP 1 @GXID=ID FROM X9_SJZD 
            WHERE FNAME=@ZDFNAME AND FTYPE=@ZDFTYPE AND 
              FLEN=@ZDFLEN AND FMEMO<>'' AND EDIT<>'' ORDER BY ID DESC;
        END
      IF @GXID<>0
        BEGIN
          UPDATE X9_SJZD SET FMEMO = ZD1.FMEMO, FZMC = ZD1.FZMC, SRLX = ZD1.SRLX,BYXM = ZD1.BYXM, 
            HSXM=ZD1.HSXM,ALIGNMENT=ZD1.ALIGNMENT, EDIT = ZD1.EDIT,MASKTYPE  = ZD1.MASKTYPE ,
            MASKSTR  = ZD1.MASKSTR , FORMATTYPE = ZD1.FORMATTYPE,FORMATSTR = ZD1.FORMATSTR,
            SUMTYPE = ZD1.SUMTYPE,SUMFMT = ZD1.SUMFMT,SEARCH = ZD1.SEARCH,TOOLTIP = ZD1.TOOLTIP    
          FROM X9_SJZD INNER JOIN  X9_SJZD AS ZD1 ON ZD1.ID=@GXID 
          WHERE X9_SJZD.ID =@ZDID;   
        END
    FETCH NEXT FROM SJZD_cursor
      INTO @ZDID,@ZDFNAME,@ZDFTYPE,@ZDFLEN;
  END
  CLOSE SJZD_cursor;
  DEALLOCATE SJZD_cursor;
  --设置功能定义用控件
  UPDATE X9_SJZD SET EDIT=(CASE WHEN ZDBB='99' AND FMEMO LIKE '%字段%' THEN 'FieldList' ELSE 'TextEdit' END)         
    WHERE X9_SJZD.ZDBB=@ZDBB AND X9_SJZD.TNAME =@TBMC AND (EDIT IS NULL OR EDIT ='');   
  --设置分组
  UPDATE X9_SJZD SET FZMC='1.基本信息'    
    WHERE X9_SJZD.ZDBB=@ZDBB AND X9_SJZD.TNAME =@TBMC AND (X9_SJZD.FZMC ='' OR X9_SJZD.FZMC IS NULL);   
  UPDATE X9_SJZD SET EDIT='CheckEdit'  
    WHERE X9_SJZD.ZDBB=@ZDBB AND X9_SJZD.TNAME =@TBMC AND EDIT='TextEdit' AND FTYPE='bit';
  SELECT '数据字典维护';  
END TRY  
BEGIN CATCH  
  DECLARE @ERRORMESSAGE NVARCHAR(4000),@ERRORSEVERITY INT,@ERRORSTATE INT;    
  SELECT  @ERRORMESSAGE = ERROR_MESSAGE(),@ERRORSEVERITY = ERROR_SEVERITY(),@ERRORSTATE = ERROR_STATE();    
  RAISERROR (@ERRORMESSAGE,  @ERRORSEVERITY,  @ERRORSTATE );   
END CATCH;    

四、数据字典应用

数据字典通过自动加手动的编辑后,前端设计或后端设计就可以使用了。

根据需要设计可用的字段,即可满足模型化低代码的操作界面设计了。

相关文章
|
5月前
|
存储 缓存 监控
如何设计数据库结构?
如何设计数据库结构?【6月更文挑战第9天】
56 3
|
6月前
|
存储 SQL 数据挖掘
视图、触发器和存储过程:提升数据库功能
视图、触发器和存储过程:提升数据库功能
93 1
|
SQL 数据管理
SQL 6大约束 以及 数据管理(增删改查)
SQL 6大约束 以及 数据管理(增删改查)
|
存储 数据库 索引
数据库视频第五章操作架构、视图和索引
数据库视频第五章操作架构、视图和索引
|
存储 SQL 数据库
数据库视频第九章存储过程(一)
数据库视频第九章存储过程(一)
|
架构师 NoSQL 数据库
「数据架构」数据模型,数据字典,数据库模式 和ERD的比较
「数据架构」数据模型,数据字典,数据库模式 和ERD的比较
|
SQL 安全 数据库
关于数据库的视图,你了解多少
视图(View)并不在数据库中实际存在,而是一种虚拟表,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。即视图就是执行查询语句后所返回的结果集,所以在创建视图的时候,主要就是创建这条SQL查询语句。
190 0
关于数据库的视图,你了解多少
|
存储 数据库
2 数据库结构优化
2.1 数据库结构优化的目的 减少数据冗余 尽量避免数据维护中出现更新,插入和删除异常 插入异常 如果表中的某个实体随着另一个实体而存在 先看一个表结构 为学号,课程名称列定义主键约束,即一个学生只能选相同的课程一次 看看数据 ...
1272 0
|
Oracle 关系型数据库 数据库