精华内容
下载资源
问答
  • 数据库表结构
    千次阅读
    2018-08-20 16:28:54

    当前研发工作中经常出现因数据库表、数据库表字段格式不规则而影响开发进度的问题,在后续开发使用原来数据库表时,也会因为数据库表的可读性不够高,表字段规则不统一,造成数据查询,数据使用效率低的问题,所以有必要整理出一套合适的数据库表字段命名规范来解决优化这些问题。

    本文是一篇包含了数据库命名、数据库表命名、数据库表字段命名及SQL语言编码的规范文档,针对研发中易产生的问题和常见错误做了一个整理和修改,为日后涉及到数据库相关的研发工作做好准备。

     

     

    数据库规范化设计要求

    一、表中避免空列

    减少数据库处理记录的复杂性,

    1、空列数目少的时候,可以设置默认值。

    2、空列数目多的时候,可以设置单独一张表存储。

    二、表不应该有重复的值或列

    创建字典表

    三、唯一的标识某一条数据

    ID  

    如有必要添加 行号 进行排序显示管理

     

    四、数据库对象统一的前缀名

    t_department 

    五、尽量只存单一实体类型数据

    一个表中的字段不要太复杂 ,能分开的单独分开建表。

     

     


    数据库相关命名规范

     

    一、数据库命名规范

    采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔,一个项目一个数据库,多个项目慎用同一个数据库

     

    二、数据库表命名规范

    2.1数据表命名规范

    (1)采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔

    (2)全部小写命名,禁止出现大写

    (3)禁止使用数据库关键字,如:name,time ,datetime,password等(user ) 不然sql语句 写成 select * from [User]

    (4)表名称不应该取得太长(一般不超过三个英文单词)

    (5)表的名称一般使用名词或者动宾短语

    (6)用单数形式表示名称,例如,使用 employee,而不是 employees

    明细表的名称为:主表的名称+字符dtl(detail缩写)

    例如:采购定单的名称为:po_order,则采购定单的明细表为:po_orderdtl 

    (7)表必须填写描述信息(使用SQL语句建表时)

     

    2.2命名规范

    ①模块_+功能点  示例:alllive_log   alllive_category

    ②功能点  示例:live   message

    ③通用表  示例:all_user

     

    2.3待优化命名示例

    ①冗余:

    错误示例:yy_alllive_video_recomment    yy_alllive_open_close_log

    说明:去除项目名,简化表名长度,去”yy_”

     

    ②相同类别表命名存在差异,管理性差

    错误示例:yy_all_live_category    yy_alllive_comment_user

    说明:去除项目名,统一命名规则,均为”yy_alllive_”开头即可

     

    ③命名格式存在差异

    错误示例:yy_showfriend    yy_user_getpoints    yy_live_program_get

    说明:去除项目名,统一命名规则,动宾短语分离动宾逻辑顺序统一

     

    三、数据库字段命名规范

    3.1字段命名规范

    (1)采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔

    (2)全部小写命名,禁止出现大写

    (3)字段必须填写描述信息

    (4)禁止使用数据库关键字,如:name,time ,datetime password 等

    (5)字段名称一般采用名词或动宾短语

    (6)采用字段的名称必须是易于理解,一般不超过三个英文单词

    (7)在命名表的列时,不要重复表的名称

    例如,在名employe的表中避免使用名为employee_lastname的字段

    (8)不要在列的名称中包含数据类型

    (9)字段命名使用完整名称,禁止缩写

     

    3.2命名规范

    ①名词  示例:user_id    user_name    sex

    ②动宾短语  示例:is_friend   is_good

     

    3.3待优化命名示例

    ①大小写规则不统一

    错误示例:user_id    houseID

    说明:使用统一规则,修改为”user_id”,”house_id”

     

    ②加下划线规则不统一

    错误示例:username    userid    isfriend    isgood

    说明:使用下划线进行分类,提升可性,方便管理,修改为”user_name”,”user_id”,”is_friend”,”is_good”

     

    ③字段表示不明确

    错误示例:uid    pid

    说明:使用完整名称,提高可读性,修改为”user_id”,”person_id”

     

    3.4字段类型规范

    (1)所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、binary 、varbinary外,必须有默认值,字符型的默认值为一个空字符值串’’,数值型的默认值为数值0,逻辑型的默认值为数值0

    (2)系统中所有逻辑型中数值0表示为“假”,数值1表示为“真”,datetime、smalldatetime类型的字段没有默认值,必须为NULL

    (3)用尽量少的存储空间来存储一个字段的数据

    使用int就不要使用varchar、char,

    用varchar(16)就不要使varchar(256)

    IP地址使用int类型

    固定长度的类型最好使用char,例如:邮编(postcode)

    能使用tinyint就不要使用smallint,int

    最好给每个字段一个默认值,最好不能为null

    (4)用合适的字段类型节约空间

    字符转化为数字(能转化的最好转化,同样节约空间、提高查询性能)

    避免使用NULL字段(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引无效)

    少用text类型(尽量使用varchar代替text字段)

     

    3.5数据库中每个字段的规范描述 

       (1)尽量遵守第三范式的标准(3NF) 

         表内的每一个值只能被表达一次 

         表内的每一行都应当被唯一的标示 

         表内不应该存储依赖于其他键的非键信息

    (2)如果字段事实上是与其它表的关键字相关联而未设计为外键引用,需建索引

    (3)如果字段与其它表的字段相关联,需建索引

    (4)如果字段需做模糊查询之外的条件查询,需建索引

    (5)除了主关键字允许建立簇索引外,其它字段所建索引必须为非簇索引

     

    四、SQL语言编码规范 

    4.1大小写规范 

    (1)所有关键字必须大写,如:INSERT、UPDATE、DELETE、SELECT及其子句,IF……ELSE、CASE、DECLARE等

    (2)所有函数及其参数中除用户变量以外的部分必须大写

    (3)在定义变量时用到的数据类型必须小写

     

    4.2注释 

    注释可以包含在批处理中,在触发器、存储过程中包含描述性注释将大大增加文本的可读性和可维护性,本规范建议: 

    (1)注释以英文为主,实际应用中,发现以中文注释的SQL语句版本在英文环境中不可用,为避免后续版本执行过程中发生某些异常错误,建议使用英文注释

    (2)注释尽可能详细、全面创建每一数据对象前,应具体描述该对象的功能和用途,传入参数的含义应该有所说明,如果取值范围确定,也应该一并说明,取值有特定含义的变量(如boolean类型变量),应给出每个值的含义

    (3)注释语法:单行注释、多行注释 

    单行注释:注释前有两个连字符(--)对变量、条件子句可以采用该类注释

    多行注释:符号之间的内容为注释内容,对某项完整的操作建议使用该类注释

    (4)注释简洁,同时应描述清晰

    (5)函数注释: 

    编写函数文本--如触发器、存储过程以及其他数据对象--时,必须为每个函数增加适当注释,该注释以多行注释为主,主要结构如下: 

    CREATE PROCEDURE sp_xxx 

     

     

     

     数据库表设计需要满足

    1、功能需求

    2、性能需求

    3、扩展性需求

     

     

    参考:

    数据库设计规范化的 5 个要求

    数据库表设计的几条准则

    数据库表结构设计浅谈

     

     

    数据库表及字段命名规范(一)

    更多相关内容
  • 数据库表结构文档自动生成工具; 1.增加了对excel文件的支持,可以同时生成word 和excel文件 2.运行方式DocMain.java ExcelMain.java 3.生成excel文件的模板需要特别注意:xls模板中行数必须足够大,eg.ss:...
  • 从网上下载的金蝶带字段的比较全的数据库表结构
  • oracle数据库表结构比较

    热门讨论 2014-02-21 09:15:00
    oracle两个不同的数据库比较表结构的不同,同时自动形成升级的sql语句,以目标数据库为标准,自动形成源数据库中没有的表或列的创建sql语句;如果源数据库中存在目标数据库中没有的表或列,则不予考虑;即只考虑没有...
  • 金蝶K3 12.3数据库表结构(完整包)

    热门讨论 2013-12-24 14:57:08
    由70多个文件组成,金蝶K3 12.3详细的所属模块,,字段含义说明。不需多说,K3开发必备参考。下载定不后悔。
  • Java获取数据库表结构

    千次阅读 2020-09-01 23:33:18
    虽然各个DB厂商查询数据库表结构的语句不同,但是Java中通过封装,可以使用共同的API来获取。 各个具体的DB厂商有各自的实现,只需导入相应的包即可。

    Java能够操作数据库,当然能够获取到数据库的表结构。
    虽然各个DB厂商查询数据库表结构的语句不同,但是Java中通过封装,可以使用共同的API来获取。
    各个具体的DB厂商有各自的实现,只需导入相应的包即可。

    代码

    废话不多说,直接看代码。

    public static void main(String[] args) throws Exception {
       String driver = "com.mysql.cj.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/book_sc?serverTimezone=GMT";
        String user = "root";
        String password = "root";
    
        printTableStructure(driver, url, user, password);
    }
    
    /**
     * 打印所有表结构
     *
     * @param driver   driver
     * @param url      url
     * @param user     user
     * @param password password
     * @throws Exception exception
     */
    private static void printTableStructure(String driver, String url, String user, String password) throws Exception {
        Class.forName(driver);
        Connection connection = DriverManager.getConnection(url, user, password);
    
        DatabaseMetaData metaData = connection.getMetaData();
        // 获取所有表
        ResultSet tableResultSet = metaData.getTables(null, null, "order%", new String[]{"TABLE"});
        while (tableResultSet.next()) {
            String tableName = tableResultSet.getString("TABLE_NAME");
            System.out.println("table:" + tableName);
    
            // 获取表字段结构
            ResultSet columnResultSet = metaData.getColumns(null, "%", tableName, "%");
            while (columnResultSet.next()) {
                // 字段名称
                String columnName = columnResultSet.getString("COLUMN_NAME");
                // 数据类型
                String columnType = columnResultSet.getString("TYPE_NAME");
                // 字段长度
                int datasize = columnResultSet.getInt("COLUMN_SIZE");
                // 小数部分位数
                int digits = columnResultSet.getInt("DECIMAL_DIGITS");
                // 是否可为空 1代表可空 0代表不可为空
                int nullable = columnResultSet.getInt("NULLABLE");
                // 描述
                String remarks = columnResultSet.getString("REMARKS");
                System.out.println(columnName + " " + columnType + " " + datasize + " " + digits + " " + nullable + " " + remarks);
            }
            System.out.println("=================================");
        }
    }
    
    

    说明

    DatabaseMetaData的getTable方法可以获取表信息,代码中获取的是 order开头的所有表,打印表名。
    其中关于表,可以获得如下信息:

    • TABLE_CAT String => 表类别(可为 null)
    • TABLE_SCHEM String => 表模式(可为 null)
    • TABLE_NAME String => 表名称
    • TABLE_TYPE String => 表类型。典型的类型是 “TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS” 和 “SYNONYM”。
    • REMARKS String => 表的解释性注释
    • TYPE_CAT String => 类型的类别(可为 null)
    • TYPE_SCHEM String => 类型模式(可为 null)
    • TYPE_NAME String => 类型名称(可为 null)
    • SELF_REFERENCING_COL_NAME String => 有类型表的指定 “identifier” 列的名称(可为 null)
    • REF_GENERATION String => 指定在 SELF_REFERENCING_COL_NAME 中创建值的方式。这些值为 “SYSTEM”、“USER” 和 “DERIVED”。(可能为 null)

    DatabaseMetaData的getColumns方法可以获取表字段信息,代码中分别获取其名称、类型、长度等信息。
    其中关于字段,可以获得如下信息:

    • TABLE_CAT String => 表类别(可为 null)
    • TABLE_SCHEM String => 表模式(可为 null)
    • TABLE_NAME String => 表名称
    • COLUMN_NAME String => 列名称
    • DATA_TYPE int => 来自 java.sql.Types 的 SQL 类型
    • TYPE_NAME String => 数据源依赖的类型名称,对于 UDT,该类型名称是完全限定的
    • COLUMN_SIZE int => 列的大小。
    • BUFFER_LENGTH 未被使用。
    • DECIMAL_DIGITS int => 小数部分的位数。对于 DECIMAL_DIGITS 不适用的数据类型,则返回 Null。
    • NUM_PREC_RADIX int => 基数(通常为 10 或 2)
    • NULLABLE int => 是否允许使用 NULL。
    • columnNoNulls - 可能不允许使用 NULL 值
    • columnNullable - 明确允许使用 NULL 值
    • columnNullableUnknown - 不知道是否可使用 null
    • REMARKS String => 描述列的注释(可为 null)
    • COLUMN_DEF String => 该列的默认值,当值在单引号内时应被解释为一个字符串(可为 null)
    • SQL_DATA_TYPE int => 未使用
    • SQL_DATETIME_SUB int => 未使用
    • CHAR_OCTET_LENGTH int => 对于 char 类型,该长度是列中的最大字节数
    • ORDINAL_POSITION int => 表中的列的索引(从 1 开始)
    • IS_NULLABLE String => ISO 规则用于确定列是否包括 null。
    • YES — 如果参数可以包括 NULL
    • NO — 如果参数不可以包括 NULL
    • 空字符串 — 如果不知道参数是否可以包括 null
    • SCOPE_CATLOG String => 表的类别,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null)
    • SCOPE_SCHEMA String => 表的模式,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null)
    • SCOPE_TABLE String => 表名称,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null)
    • SOURCE_DATA_TYPE short => 不同类型或用户生成 Ref 类型、来自 java.sql.Types 的 SQL 类型的源类型(如果 DATA_TYPE 不是 DISTINCT 或用户生成的 REF,则为 null)
    • IS_AUTOINCREMENT String => 指示此列是否自动增加
    • YES — 如果该列自动增加
    • NO — 如果该列不自动增加
    • 空字符串 — 如果不能确定该列是否是自动增加参数
    • COLUMN_SIZE 列表示给定列的指定列大小。对于数值数据,这是最大精度。对于字符数据,这是字符长度。对于日期时间数据类型,这是 String 表示形式的字符长度(假定允许的最大小数秒组件的精度)。对于二进制数据,这是字节长度。对于 ROWID 数据类型,这是字节长度。对于列大小不适用的数据类型,则返回 Null。

    关于上述两个方法的入参,参考如下说明:

    • catalog - 类别名称;它必须与存储在数据库中的类别名称匹配;该参数为 “” 表示获取没有类别的那些描述;为 null 则表示该类别名称不应该用于缩小搜索范围
    • schemaPattern - 模式名称的模式;它必须与存储在数据库中的模式名称匹配;该参数为 “” 表示获取没有模式的那些描述;为 null 则表示该模式名称不应该用于缩小搜索范围
    • tableNamePattern - 表名称模式;它必须与存储在数据库中的表名称匹配
    • columnNamePattern - 列名称模式;它必须与存储在数据库中的列名称匹配
    展开全文
  • Jira - 数据库表结构

    千次阅读 2020-04-07 17:31:58
    Jira - 数据库表结构 Max.Bai 2020-04 记录用到的数据库表结构(mysql) 表名 存储内容 关键字段 备注 project 项目主表 ID pname 项目名称 URL LEAD DESCRIPTION ...

    Jira - 数据库表结构

    Max.Bai

    2020-04

     

    记录用到的数据库表结构(mysql)

    CSDN 表格编辑时是对的,保存后表格就变形了,全部错行了,后面两列是空的就表示字段,表名那一行后面两列是有内容的。

    我在QQ文档保存了一份,可去查看【腾讯文档】Jira数据库表结构  https://docs.qq.com/sheet/DZE5tZUNRcUh3UWJW

    表名存储内容关键字段备注
    project项目主表ID 
    pname 项目名称
    URL 
    LEAD 
    DESCRIPTION 
    pkey 项目KEY
    pcounter 
    ASSIGNEETYPE 
    AVATAR 
    ORIGINALKEY 
    PROJECTTYPE 
    project_key项目key表ID 
    PROJECT_ID 项目ID
    PROJECT_KEY项目KEY
    projectrole项目角色ID 
    NAME 
    DESCRIPTION 
    projectroleactor项目角色关联关系ID 
    PID 项目ID 
    PROJECTROLEID 项目角色ID
    ROLETYPE 角色类型 atlassian-group-role-actor、atlassian-user-role-actor
    ROLETYPEPARAMETER 具体用户或用户组
    issuetypeissue类型ID 
    SEQUENCE 
    pname类型名称
    pstyle 
    DESCRIPTION 
    ICONURL 
    AVATAR 
    issuestatusissue状态ID 
    SEQUENCE 
    pname状态名称
    DESCRIPTION 
    ICONURL 
    STATUSCATEGORY 
    priorityissue优先级ID 
    SEQUENCE 
    pname优先级名称
    DESCRIPTION 
    resolutionissue解决结果ID 
    SEQUENCE 
    pname解决结果名称
    DESCRIPTION 
    issuetypescreenschemeissue的scheme名称ID 
    NAME 
    DESCRIPTION 
    issuetypescreenschemeentityissue的scheme详情ID 
    ISSUETYPE 
    SCHEME issuetypescreenscheme的ID 
    FIELDSCREENSCHEME fieldscreenscheme的ID 
    fieldscreen字段的screenID 
    NAME 
    DESCRIPTION 
    fieldscreenscheme字段的screenschemeID 
    NAME 
    DESCRIPTION 
    fieldscreenschemeitem字段的screenschemeitemID 
    OPERATION 
    FIELDSCREEN fieldscreen的ID 
    FIELDSCREENSCHEME fieldscreenscheme的ID 
    fieldscreentab ID 
    NAME 
    DESCRIPTION 
    SEQUENCE 
    FIELDSCREEN fieldscreen的ID 
    jiraissueJIRA的issueID 
    pkey空字段
    issuenum和project表pkey字段 组合成issue key
    PROJECT project的ID关联project表ID
    REPORTER 报告人报告人
    ASSIGNEE 指派人经办人
    CREATOR创建人
    issuetype issuetype的ID关联issuetype表ID
    SUMMARY标题
    DESCRIPTION描述
    ENVIRONMENT 
    PRIORITY关联priority表ID
    RESOLUTION关联表resolution表ID
    issuestatus issuestatus的ID关联issuestatus表ID
    CREATED创建时间
    UPDATED更新时间
    DUEDATE 
    RESOLUTIONDATE解决时间
    VOTES 
    WATCHES 
    TIMEORIGINALESTIMATE 
    TIMEESTIMATE 
    TIMESPENT 
    WORKFLOW_ID工作流id
    SECURITY 
    FIXFOR 
    workflowscheme ID 
    NAME 
    DESCRIPTION 
    workflowschemeentity ID 
    SCHEME workflowscheme的ID 
    WORKFLOW 
    issuetype 
    jiraworkflowsJIRA的工作流ID 
    workflowname 
    creatorname 
    DESCRIPTOR 
    ISLOCKED 
    configurationcontext ID 
    PROJECTCATEGORY 
    PROJECT 
    customfield 
    FIELDCONFIGSCHEME 
    worklog登录工时表ID 
    issueidissueid  关联jiraissue表ID
    AUTHOR添加工时作者
    grouplevel 
    rolelevel 
    worklogbody添加工时备注
    CREATED添加时间
    UPDATEAUTHOR修改人
    UPDATED修改时间
    STARTDATE工时开始时间
    timeworked工时时长,单位秒
    CUSTOMFIELD自定义字段表ID 
    cfkey 
    CUSTOMFIELDTYPEKEY 
    CUSTOMFIELDSEARCHERKEY 
    cfname自定义字段名
    DESCRIPTION描述
    defaultvalue默认值
    FIELDTYPE 
    PROJECT 
    ISSUETYPE 
    customfieldoption自定义字段选项表ID 
    CUSTOMFIELD关联customfield表ID
    CUSTOMFIELDCONFIG自定义字段配置
    PARENTOPTIONID 
    SEQUENCE选项顺序
    customvalue选项值
    optiontype 
    disabled是否禁用
    customfieldvalue自定义字段值表ID 
    ISSUEissueid  关联jiraissue表ID
    CUSTOMFIELD自动以字段id 关联customfield表ID
    UPDATED更新时间
    PARENTKEY父节点 key
    STRINGVALUE字符串类型值  如果是选项类型,关联customfieldoption表ID
    NUMBERVALUE数字类型值
    TEXTVALUE文本类型值
    DATEVALUE日期类型值
    VALUETYPE值类型
    issuelinktypeissue链接类型表ID类型ID
    LINKNAME类型名称
    INWARD链接方描述
    OUTWARD被链接方描述
    pstyle 
    issuelinkissue链接表ID 
    LINKTYPE关联issuelinktype表ID
    SOURCE链接方 issueid  关联jiraissue表ID
    DESTINATION被链接方 issueid  关联jiraissue表ID
    SEQUENCE 
    changegroupissue修改组表ID 
    issueid关联jiraissue表ID
    AUTHOR修改人
    CREATED创建时间
    changeitemissue修改记录表ID 
    groupid修改组id 关联changegroup表ID
    FIELDTYPE字段类型 jira, custom
    FIELD字段名
    OLDVALUE原始ID等
    OLDSTRING原始字符串
    NEWVALUE新值ID等
    NEWSTRING新值字符串
    nodeassociationissue 内部字段值表SOURCE_NODE_ID关联jiraissue表ID
    SOURCE_NODE_ENTITYissue类型
    SINK_NODE_ID值id  (比如 模块id, 关联component表ID)
    SINK_NODE_ENTITY值类型 (比如:Component)
    ASSOCIATION_TYPE类型
    SEQUENCE 
    component模块表ID模块表
    PROJECT项目ID 关联project表ID
    cname模块名称
    description描述
    URL 
    LEAD 
    ASSIGNEETYPE 
    ARCHIVED 

     

    有部分内容是 收藏的别人的

    这里放出链接 https://my.oschina.net/dushougudu/blog/3150200

     

    放一个查询Bug的demo:

    SELECT
            ji.ID as issue_id,
            CONCAT(p.pkey, '-', ji.issuenum) as issue_key, 
    				ji.SUMMARY as issue_summary, 
            ji.issuestatus as issue_jira_status, 
            ji.CREATED as issue_create_time, 		-- 创建时间
    				ji.UPDATED as issue_update_time,    -- 最后更新时间
            ji.RESOLUTIONDATE as issue_resolution_time, -- 解决时间
    				
    				ji.CREATOR as issue_creator, 		-- 创建人
    				ji.REPORTER as issue_reporter, 	-- 报告人
            ji.ASSIGNEE as issue_assignee, 	-- 经办人
    				
            ji_status.pname as issue_status_name, 	-- 状态
    				ji.PRIORITY as issue_level_id,         -- 优先级id
            ji_priority.pname as issue_level_name,			-- 优先级
    				ji.RESOLUTION as issue_resolution_id, 		-- 解决结果id
    				ji_resolution.pname as issue_resolution_name, 		-- 解决结果
    				
    				GROUP_CONCAT(bug_component_op.ID) as issue_component_id, -- 所属模块id
    				GROUP_CONCAT(bug_component_op.cname) as issue_component_name, -- 所属模块
    				
    				GROUP_CONCAT(bug_version_op.ID) as issue_version_id, -- 影响版本id
    				GROUP_CONCAT(bug_version_op.vname) as issue_version_name, -- 影响版本
    				
    				GROUP_CONCAT(bug_fixversion_op.ID) as issue_fixversion_id, -- 修复的版本id
    				GROUP_CONCAT(bug_fixversion_op.vname) as issue_fixversion_name, -- 修复的版本
    				
    				
    --         IF(ji.issuestatus in (5, 10012, 6, 10103),'Done','Backlog') as issue_status,         -- 需求状态
            
    
    				cv_bug_env.STRINGVALUE as bug_env_id, -- Bug 缺陷影响环境id
    				co_bug_env.customvalue as bug_env_name,		-- Bug 缺陷影响环境
    				
    				cv_bug_cause.STRINGVALUE as bug_cause_id,       -- Bug 缺陷根本原因id
    				co_bug_cause.customvalue as bug_cause_name,       -- Bug 缺陷根本原因
    				
            user_bug_feedback.lower_user_name as issue_bug_feedback,            -- 缺陷反馈方
    				
            cv_product.STRINGVALUE as issue_product_id, -- IT总部产品id
            co_product.customvalue as issue_product_name,    -- IT总部产品
    				
    				cv_project.STRINGVALUE as issue_project, -- 所属项目
    				
    				cv_bug_tester.STRINGVALUE as bug_tester,		-- 缺陷跟进测试
    				user_bug_tester.lower_user_name as bug_tester, 			-- 缺陷跟进测试
    				
    				cv_bug_dev.STRINGVALUE as bug_dev,		-- 缺陷跟进研发
    				user_bug_dev.lower_user_name as bug_dev, 			-- 缺陷跟进研发
    				
    				cv_bug_stage.STRINGVALUE as bug_stage_id, -- 缺陷发现阶段id
            co_bug_stage.customvalue as bug_stage_name,    -- 缺陷发现阶段
    				
            cv_bug_relate_sys.STRINGVALUE as bug_relate_sys,    -- 缺陷发现阶段
    				
    				cv_bug_reopen.NUMBERVALUE as bug_reopen_num,    -- 缺陷重启次数
    				
    				
            'end'
        FROM jiraissue ji
            JOIN project p on ji.PROJECT=p.ID
            LEFT JOIN issuestatus ji_status on ji_status.ID=ji.issuestatus        -- issue status
            LEFT JOIN priority ji_priority on ji_priority.ID=ji.PRIORITY            -- issue level
    				LEFT JOIN resolution ji_resolution on ji_resolution.ID=ji.RESOLUTION		-- issue resolution
    				
    				LEFT JOIN nodeassociation bug_component on bug_component.SOURCE_NODE_ID=ji.ID			-- 所属模块
    								AND bug_component.ASSOCIATION_TYPE='IssueComponent'
    				LEFT JOIN component bug_component_op on bug_component_op.ID=bug_component.SINK_NODE_ID			-- 所属模块
    				
    				LEFT JOIN nodeassociation bug_version on bug_version.SOURCE_NODE_ID=ji.ID			-- 影响版本
    								AND bug_version.ASSOCIATION_TYPE='IssueVersion'
    				LEFT JOIN projectversion bug_version_op on bug_version_op.ID=bug_version.SINK_NODE_ID			-- 影响版本
    
    				LEFT JOIN nodeassociation bug_fixversion on bug_fixversion.SOURCE_NODE_ID=ji.ID			-- 修复的版本
    								AND bug_fixversion.ASSOCIATION_TYPE='IssueFixVersion'
    				LEFT JOIN projectversion bug_fixversion_op on bug_fixversion_op.ID=bug_fixversion.SINK_NODE_ID			-- 修复的版本
    				
    				
            LEFT JOIN customfieldvalue cv_product on cv_product.ISSUE=ji.ID        -- IT总部产品id
                    AND cv_product.CUSTOMFIELD=13500
            LEFT JOIN customfieldoption co_product on co_product.ID=cv_product.STRINGVALUE        -- IT总部产品
            
    				LEFT JOIN customfieldvalue cv_project on cv_project.ISSUE=ji.ID        -- 所属项目
                    AND cv_project.CUSTOMFIELD=12501    -- CUSTOMFIELD 所属项目
    				
    				LEFT JOIN customfieldvalue cv_bug_env on cv_bug_env.ISSUE=ji.ID        -- 缺陷影响环境
                    AND cv_bug_env.CUSTOMFIELD=10027
    --                 AND cv_bug_env.STRINGVALUE=10044    -- 生产环境
    				LEFT JOIN customfieldoption co_bug_env on co_bug_env.ID=cv_bug_env.STRINGVALUE
            
    				LEFT JOIN customfieldvalue cv_bug_feedback on cv_bug_feedback.ISSUE=ji.ID        -- 缺陷反馈方
                    AND cv_bug_feedback.CUSTOMFIELD=10271
            LEFT JOIN app_user user_bug_feedback on user_bug_feedback.user_key=cv_bug_feedback.STRINGVALUE            -- app_user
            
    				LEFT JOIN customfieldvalue cv_bug_cause on cv_bug_cause.ISSUE=ji.ID        -- 缺陷根本原因
                    AND cv_bug_cause.CUSTOMFIELD=10026
            LEFT JOIN customfieldoption co_bug_cause on co_bug_cause.ID=cv_bug_cause.STRINGVALUE
    				
    				LEFT JOIN customfieldvalue cv_bug_tester on cv_bug_tester.ISSUE=ji.ID        -- 缺陷跟进测试
                    AND cv_bug_tester.CUSTOMFIELD=10010
            LEFT JOIN app_user user_bug_tester on user_bug_tester.user_key=cv_bug_tester.STRINGVALUE
    				
    				LEFT JOIN customfieldvalue cv_bug_dev on cv_bug_dev.ISSUE=ji.ID        -- 缺陷跟进研发
                    AND cv_bug_dev.CUSTOMFIELD=10012
            LEFT JOIN app_user user_bug_dev on user_bug_dev.user_key=cv_bug_dev.STRINGVALUE
    				
    				LEFT JOIN customfieldvalue cv_bug_stage on cv_bug_stage.ISSUE=ji.ID        -- 缺陷发现阶段
                    AND cv_bug_stage.CUSTOMFIELD=10021
            LEFT JOIN customfieldoption co_bug_stage on co_bug_stage.ID=cv_bug_stage.STRINGVALUE        -- 缺陷发现阶段
    				
    				LEFT JOIN customfieldvalue cv_bug_relate_sys on cv_bug_relate_sys.ISSUE=ji.ID        -- 缺陷关联系统
                    AND cv_bug_relate_sys.CUSTOMFIELD=10043
    								
    				LEFT JOIN customfieldvalue cv_bug_reopen on cv_bug_reopen.ISSUE=ji.ID        -- 缺陷重启次数
                    AND cv_bug_reopen.CUSTOMFIELD=14532
    				
        WHERE
    				ji.issuetype = 10004            -- issuetype = Bug
    --             AND (ji.RESOLUTION in (10000, 10004, 11100) or ji.RESOLUTION is NULL) -- resolution in (Unresolved-10004, Done, "Don't Fixed", 完成) 为空unresolved
    				AND ji.CREATED >= '2020-01-01'   -- CREATED >= -1w
    -- 				and p.pkey = 'IFS'
        GROUP BY issue_id
        ORDER BY issue_id;

     

    展开全文
  • 数据库表结构设计方法及原则

    千次阅读 2020-12-01 22:30:43
    在目前的企业信息系统中,数据库还是最佳的数据存储方式,虽然已经有很多的书籍在指导我们进行数据库设计,但应该那种方式是设计数据库表结构的最好方法、设计时应遵从什么样的原则、四个范式如何能够用一种方式...

    在目前的企业信息系统中,数据库还是最佳的数据存储方式,虽然已经有很多的书籍在指导我们进行数据库设计,但应该那种方式是设计数据库的表结构的最好方法、设计时应遵从什么样的原则、四个范式如何能够用一种方式达到顺畅的应用等是我一直在思考和总结的问题,下文是我针对这几个问题根据自己的设计经历准备总结的一篇文章的提纲,欢迎大家一块进行探讨,集思广益。其中提到了领域建模的概念,但未作详细解释,希望以后能够有时间我们针对这个命题进行深入探讨。

    1)不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计;不同组件间所对应的数据库表之间的关联应尽可能减少,如果不同组件间的表需要外键关联也尽量不要创建外键关联,而只是记录关联表的一个主键,确保组件对应的表之间的独立性,为系统或表结构的重构提供可能性。

    2)采用领域模型驱动的方式和自顶向下的思路进行数据库设计,首先分析系统业务,根据职责定义对象。对象要符合封装的特性,确保与职责相关的数据项被定义在一个对象之内,这些数据项能够完整描述该职责,不会出现职责描述缺失。并且一个对象有且只有一项职责,如果一个对象要负责两个或两个以上的职责,应进行分拆。

    3)根据建立的领域模型进行数据库表的映射,此时应参考数据库设计第二范式:一个表中的所有非关键字属性都依赖于整个关键字。关键字可以是一个属性,也可以是多个属性的集合,不论那种方式,都应确保关键字能够保证唯一性。在确定关键字时,应保证关键字不会参与业务且不会出现更新异常,这时,最优解决方案为采用一个自增数值型属性或一个随机字符串作为表的关键字。

    4)由于第一点所述的领域模型驱动的方式设计数据库表结构,领域模型中的每一个对象只有一项职责,所以对象中的数据项不存在传递依赖,所以,这种思路的数据库表结构设计从一开始即满足第三范式:一个表应满足第二范式,且属性间不存在传递依赖。

    5)同样,由于对象职责的单一性以及对象之间的关系反映的是业务逻辑之间的关系,所以在领域模型中的对象存在主对象和从对象之分,从对象是从1-N或N-N的角度进一步分析主对象的业务逻辑,所以从对象及对象关系映射的表及表关联关系不存在删除和插入异常。

    6)在映射后得出的数据库表结构中,应再根据第四范式进行进一步修改,确保不存在多值依赖。这时,应根据反向工程的思路反馈给领域模型。如果表结构中存在多值依赖,则证明领域模型中的对象具有至少两个以上的职责,应根据第一条进行设计修正。第四范式:一个表如果满足BCNF,不应存在多值依赖。

    7)在经过分析后确认所有的表都满足二、三、四范式的情况下,表和表之间的关联尽量采用弱关联以便于对表字段和表结构的调整和重构。并且,我认为数据库中的表是用来持久化一个对象实例在特定时间及特定条件下的状态的,只是一个存储介质,所以,表和表之间也不应用强关联来表述业务(数据间的一致性),这一职责应由系统的逻辑层来保证,这种方式也确保了系统对于不正确数据(脏数据)的兼容性。当然,从整个系统的角度来说我们还是要尽最大努力确保系统不会产生脏数据,单从另一个角度来说,脏数据的产生在一定程度上也是不可避免的,我们也要保证系统对这种情况的容错性。这是一个折中的方案。

    8)应针对所有表的主键和外键建立索引,有针对性的(针对一些大数据量和常用检索方式)建立组合属性的索引,提高检索效率。虽然建立索引会消耗部分系统资源,但比较起在检索时搜索整张表中的数据尤其时表中的数据量较大时所带来的性能影响,以及无索引时的排序操作所带来的性能影响,这种方式仍然是值得提倡的。

    9)尽量少采用存储过程,目前已经有很多技术可以替代存储过程的功能如“对象/关系映射”等,将数据一致性的保证放在数据库中,无论对于版本控制、开发和部署、以及数据库的迁移都会带来很大的影响。但不可否认,存储过程具有性能上的优势,所以,当系统可使用的硬件不会得到提升而性能又是非常重要的质量属性时,可经过平衡考虑选用存储过程。

    10)当处理表间的关联约束所付出的代价(常常是使用性上的代价)超过了保证不会出现修改、删除、更改异常所付出的代价,并且数据冗余也不是主要的问题时,表设计可以不符合四个范式。四个范式确保了不会出现异常,但也可能由此导致过于纯洁的设计,使得表结构难于使用,所以在设计时需要进行综合判断,但首先确保符合四个范式,然后再进行精化修正是刚刚进入数据库设计领域时可以采用的最好办法。

    11)设计出的表要具有较好的使用性,主要体现在查询时是否需要关联多张表且还需使用复杂的SQL技巧。

    12)设计出的表要尽可能减少数据冗余,确保数据的准确性,有效的控制冗余有助于提高数据库的性能。

    数据库设计原则

    1. 原始单据与实体之间的关系 
      可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。 
    在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。 
    这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。

      〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。 
            这就是“一张原始单证对应多个实体”的典型例子。

    2. 主键与外键 
      一般而言,一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键 
      (因为它无子孙), 但必须要有外键(因为它有父亲)。

      主键与外键的设计,在全局数据库的设计中,占有重要地位。当全局数据库的设计完成以后,有个美国数据库设计专 
      家说:“键,到处都是键,除了键之外,什么也没有”,这就是他的数据库设计经验之谈,也反映了他对信息系统核 
      心(数据模型)的高度抽象思想。因为:主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。

    3. 基本表的性质 
      基本表与中间表、临时表不同,因为它具有如下四个特性: 
       (1) 原子性。基本表中的字段是不可再分解的。 
       (2) 原始性。基本表中的记录是原始数据(基础数据)的记录。 
       (3) 演绎性。由基本表与代码表中的数据,可以派生出所有的输出数据。 
       (4) 稳定性。基本表的结构是相对稳定的,表中的记录是要长期保存的。 
      理解基本表的性质后,在设计数据库时,就能将基本表与中间表、临时表区分开来。

    4. 范式标准 
      基本表及其字段之间的关系, 应尽量满足第三范式。但是,满足第三范式的数据库设计,往往不是最好的设计。 
      为了提高数据库的运行效率,常常需要降低范式标准:适当增加冗余,达到以空间换时间的目的。

      〖例2〗:有一张存放商品的基本表,如表1所示。“金额”这个字段的存在,表明该表的设计不满足第三范式, 
      因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“金额”这个冗余字段, 
      可以提高查询统计的速度,这就是以空间换时间的作法。 
      在Rose 2002中,规定列有两种类型:数据列和计算列。“金额”这样的列被称为“计算列”,而“单价”和 
      “数量”这样的列被称为“数据列”。

      表1 商品表的表结构 
      商品名称 商品型号 单价 数量 金额 
      电视机 29吋 2,500 40 100,000 
       
    5. 通俗地理解三个范式 
      通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解 
      三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解): 
      第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 
      第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性; 
      第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

      没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降 
      低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理 
      数据模型设计时考虑。降低范式就是增加字段,允许冗余。

    6. 要善于识别与正确处理多对多的关系 
      若两个实体之间存在多对多的关系,则应消除这种关系。消除的办法是,在两者之间增加第三个实体。这样,原来一 
      个多对多的关系,现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。这里的第三个 
      实体,实质上是一个较复杂的关系,它对应一张基本表。一般来讲,数据库设计工具不能识别多对多的关系,但能处 
      理多对多的关系。

      〖例3〗:在“图书馆信息系统”中,“图书”是一个实体,“读者”也是一个实体。这两个实体之间的关系,是一 
      个典型的多对多关系:一本图书在不同时间可以被多个读者借阅,一个读者又可以借多本图书。为此,要在二者之 
      间增加第三个实体,该实体取名为“借还书”,它的属性为:借还时间、借还标志(0表示借书,1表示还书),另外, 
      它还应该有两个外键(“图书”的主键,“读者”的主键),使它能与“图书”和“读者”连接。

    7. 主键PK的取值方法 
       PK是供程序员使用的表间连接工具,可以是一无物理意义的数字串, 由程序自动加1来实现。也可以是有物理意义 
      的字段名或字段名的组合。不过前者比后者好。当PK是字段名的组合时,建议字段的个数不要太多,多了不但索引 
      占用空间大,而且速度也慢。

    8. 正确认识数据冗余 
      主键与外键在多表中的重复出现, 不属于数据冗余,这个概念必须清楚,事实上有许多人还不清楚。非键字段的重 
      复出现, 才是数据冗余!而且是一种低级冗余,即重复性的冗余。高级冗余不是字段的重复出现,而是字段的派生出现。

      〖例4〗:商品中的“单价、数量、金额”三个字段,“金额”就是由“单价”乘以“数量”派生出来的,它就是冗余,
      而且是一种高级冗余。冗余的目的是为了提高处理速度。只有低级冗余才会增加数据的不一致性,因为同一数据,可 
      能从不同时间、地点、角色上多次录入。因此,我们提倡高级冗余(派生性冗余),反对低级冗余(重复性冗余)。

    9. E--R图没有标准答案 
      信息系统的E--R图没有标准答案,因为它的设计与画法不是惟一的,只要它覆盖了系统需求的业务范围和功能内容, 
      就是可行的。反之要修改E--R图。尽管它没有惟一的标准答案,并不意味着可以随意设计。好的E—R图的标准是: 
      结构清晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余。

    10 . 视图技术在数据库设计中很有用 
      与基本表、代码表、中间表不同,视图是一种虚表,它依赖数据源的实表而存在。视图是供程序员使用数据库的 
      一个窗口,是基表数据综合的一种形式, 是数据处理的一种方法,是用户数据保密的一种手段。为了进行复杂处理、 
      提高运算速度和节省存储空间, 视图的定义深度一般不得超过三层。 若三层视图仍不够用, 则应在视图上定义临时表, 
       在临时表上再定义视图。这样反复交迭定义, 视图的深度就不受限制了。

      对于某些与国家政治、经济、技术、军事和安全利益有关的信息系统,视图的作用更加重要。这些系统的基本表完 
      成物理设计之后,立即在基本表上建立第一层视图,这层视图的个数和结构,与基本表的个数和结构是完全相同。 
      并且规定,所有的程序员,一律只准在视图上操作。只有数据库管理员,带着多个人员共同掌握的“安全钥匙”, 
      才能直接在基本表上操作。请读者想想:这是为什么?

    11. 中间表、报表和临时表 
      中间表是存放统计数据的表,它是为数据仓库、输出报表或查询结果而设计的,有时它没有主键与外键(数据仓 
      库除外)。临时表是程序员个人设计的,存放临时记录,为个人所用。基表和中间表由DBA维护,临时表由程序员 
      自己用程序自动维护。

    12. 完整性约束表现在三个方面 
      域的完整性:用Check来实现约束,在数据库设计工具中,对字段的取值范围进行定义时,有一个Check按钮,通 
      过它定义字段的值城。 
      参照完整性:用PK、FK、表级触发器来实现。 
      用户定义完整性:它是一些业务规则,用存储过程和触发器来实现。

    13. 防止数据库设计打补丁的方法是“三少原则” 
       (1) 一个数据库中表的个数越少越好。只有表的个数少了,才能说明系统的E--R图少而精,去掉了重复的多余的 
        实体,形成了对客观世界的高度抽象,进行了系统的数据集成,防止了打补丁式的设计;

       (2) 一个表中组合主键的字段个数越少越好。因为主键的作用,一是建主键索引,二是做为子表的外键,所以组 
        合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间;

       (3) 一个表中的字段个数越少越好。只有字段的个数少了,才能说明在系统中不存在数据重复,且很少有数据冗 
        余,更重要的是督促读者学会“列变行”,这样就防止了将子表中的字段拉入到主表中去,在主表中留下许 
        多空余的字段。所谓“列变行”,就是将主表中的一部分内容拉出去,另外单独建一个子表。这个方法很简 
        单,有的人就是不习惯、不采纳、不执行。

      数据库设计的实用原则是:在数据冗余和处理速度之间找到合适的平衡点。“三少”是一个整体概念,综合观点, 
      不能孤立某一个原则。该原则是相对的,不是绝对的。“三多”原则肯定是错误的。试想:若覆盖系统同样的功 
      能,一百个实体(共一千个属性) 的E--R图,肯定比二百个实体(共二千个属性) 的E--R图,要好得多。

      提倡“三少”原则,是叫读者学会利用数据库设计技术进行系统的数据集成。数据集成的步骤是将文件系统集成 
      为应用数据库,将应用数据库集成为主题数据库,将主题数据库集成为全局综合数据库。集成的程度越高,数据 
      共享性就越强,信息孤岛现象就越少,整个企业信息系统的全局E—R图中实体的个数、主键的个数、属性的个数 
      就会越少。

      提倡“三少”原则的目的,是防止读者利用打补丁技术,不断地对数据库进行增删改,使企业数据库变成了随意 
      设计数据库表的“垃圾堆”,或数据库表的“大杂院”,最后造成数据库中的基本表、代码表、中间表、临时表 
      杂乱无章,不计其数,导致企事业单位的信息系统无法维护而瘫痪。

       “三多”原则任何人都可以做到,该原则是“打补丁方法”设计数据库的歪理学说。“三少”原则是少而精的 
      原则,它要求有较高的数据库设计技巧与艺术,不是任何人都能做到的,因为该原则是杜绝用“打补丁方法” 
      设计数据库的理论依据。

    14. 提高数据库运行效率的办法 
      在给定的系统硬件和系统软件条件下,提高数据库系统的运行效率的办法是: 
       (1) 在数据库物理设计时,降低范式,增加冗余, 少用触发器, 多用存储过程。 
       (2) 当计算非常复杂、而且记录条数非常巨大时(例如一千万条),复杂计算要先在数据库外面,以文件系统方
        式用C++语言计算处理完成之后,最后才入库追加到表中去。这是电信计费系统设计的经验。 
       (3) 发现某个表的记录太多,例如超过一千万条,则要对该表进行水平分割。水平分割的做法是,以该表主键 
        PK的某个值为界线,将该表的记录水平分割为两个表。若发现某个表的字段太多,例如超过八十个,则 
        垂直分割该表,将原来的一个表分解为两个表。 
       (4) 对数据库管理系统DBMS进行系统优化,即优化各种系统参数,如缓冲区个数。 
       (5) 在使用面向数据的SQL语言进行程序设计时,尽量采取优化算法。 
        总之,要提高数据库的运行效率,必须从数据库系统级优化、数据库设计级优化、程序实现级优化,这三 
        个层次上同时下功夫。

      上述十四个技巧,是许多人在大量的数据库分析与设计实践中,逐步总结出来的。对于这些经验的运用,读者不能生帮硬套,死记硬背,而要消化理解,实事求是,灵活掌握。并逐步做到:在应用中发展,在发展中应用。

    上一篇:Oracle数据库访问性能优化

    下一篇:Oracle行链接(Row chaining) 与行迁移(Row Migration)

    展开全文
  • 自己收藏多年的全国省市县数据sql,并带有数据库表模型,直接按模型创建数据库表,sql一执行就可以拥有全国到县级别的数据源了。
  • 选择表,右键-对象信息 这样就能看到表结构图了 红色圈圈那里可以上下拉动
  • 对比两个数据库表结构(支持sql2008)

    热门讨论 2012-03-26 16:27:32
    在项目做好后实施了以后,可能因为需求等原因需要升级, 这时候一般都是在测试系统改好后在更新到正式系统. ...改程序可以对比两个数据库下所有表的表结构的不同.并显示 同时也有源程序 改代码已支持sql2008
  • 快速生成数据字典 1 简述 在从业过程中,经常遇到一些先行后设计、先开发再总结的老旧项目;...但是不用担心,我这里就有一个快速生成 数据字典,以及快速生成数据库表结构的方式(仅对MySQL而已)
  • 数据库表结构设计

    千次阅读 2019-04-08 21:20:30
    在进行数据库的表结构设计的实操之前,应当好好了解一下数据库表结构设计的几个关键的问题: 为什么要学习数据库表结构设计 在实际的数据库开发中,需要将大量的结构化数据汇总到数据库表中,这时候不能鲁莽的开始...
  • 更新mysql表结构,同步数据库表结构

    千次阅读 2019-07-04 14:33:03
    按照某个库的表结构,更新其他库的表结构 #找到你们需要更新表结构修改的库/或者你自己定义个数组,把名字都列出来 master_db=($(mysql -h 127.0.0.1 -uroot -p12345678 -N -s -e "show databases"|grep my_db)...
  • Mysql数据库表结构导出工具介绍

    千次阅读 2019-02-27 11:15:02
    软件开发过程中,数据库设计是其中非常重要的一个环节,一般在设计阶段都会采用PowerDesigner进行数据库表的设计并生成数据库表结构文档。但是有的时候数据库表结构文档缺失了怎么办,能不能从数据库直接导出一个...
  • Oracle数据库表结构导出成Word文档工具(带源码下载) 修改了一下数据库的连接方式:由于我安装的是win764位+office64+oracle client 32位,用MSDAORA.1无法连接,所以将MSDAORA.1换为OraOleDb.Oracle.1,换后正常连接...
  • sqlserver读取数据库表结构

    千次阅读 2019-12-26 17:01:20
    在使用sql server进行管理时,可以通过sql语句来获取 相关的结构 主要用到的是 sys.sysobjects 数据库对象。包括 表名对象 、的约束等,都存在这张表上 sys.syscolumns 数据库所有物理的列 存储所有...
  • 文章目录1 摘要2 数据导出2.1 导出数据库表结构至Excel2.2 导出数据库表结构为 SQL2.3 导出数据库表数据至Excel3 推荐参考资料 1 摘要 在编写项目设计文档的时候,通常需要将数据库的表结构也包含在其中,为了更加...
  • MySQL数据库表结构的设计

    万次阅读 多人点赞 2019-05-28 13:51:56
    MySQL数据库表结构的设计。四大范式。表结构的设计是数据库优化中至关重要的环节,需要认真谨慎对待,在遵守四大范式的前提下,充分考虑业务未来的可扩展性,适应未来业务变化,促进系统更加健康健壮。
  • powerdesigner16.5逆向生成数据库表结构

    千次阅读 2020-08-06 17:20:20
    powerdesigner是一款数据库建模工具,可以用来生成数据库模型,也可以反向生成表结构,保存为word。 你编写表结构文档时候是自己一个字一个字敲得吗?如果这样效率就太低了,如果有很多表会把你逼疯了。如果使用这个...
  • Mysql——》查看数据库表结构

    千次阅读 2019-05-14 08:49:10
    版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,...Mysql——》查看数据库表结构一、查看数据库表结构 一、查看数据库表结构 -- table_schema:库名 -- table_name: 表名 SELECT TABLE...
  • 通达OA 2017 数据库字典 表结构word文件可编辑,开发人员必备
  • 数据库表结构关系图生成

    万次阅读 多人点赞 2019-12-08 06:21:09
    随便点击试一下,最后你会发现点击从左数第三个的时候,会变成我们想要的数据库表结构图 如果你想看他们单个的模型图,你可选中其中一个,右击鼠标,选择逆向表到模型图 然后就会弹出一个窗体 显示你要的模型图 ....
  • 导出 MySQL 数据库表结构设计文档

    千次阅读 2020-01-08 14:44:54
    在我寻找导出文档工具的过程中,有幸碰到一个博主的文章,是关于java导出mysql或者oracle数据库表结构设计文档 链接: https://www.jianshu.com/p/884aff422649 项目下载运行之后: 如上填写完信息之后 ...
  • 我们在工作中会经常写数据库表设计的文档,当我们表设计好后,需要将表结构做成word,进行评审等, 这个过程很麻烦,总不能手动一个个填吧,这里有个半自动方法,将表结构一个个的生成word表格 比如我需要用户表:...
  • navicat导出数据库表结构及数据

    千次阅读 2020-06-29 22:09:53
    本文介绍下使用navicat导出数据库表结构、表数据 导出表结构、数据 1、选择工具->数据传输 2、选择我们的数据库,然后目标选择文件,目录导出到本地桌面的1.sql文件(也可以选择连接把数据传输到其他数据库) 3...
  • 数据库表结构(字段信息等)导出Word,Excel,HTML,CHM等格式: 一、SQL语句查询表结构方式(复制粘贴) 二、采用软件DBCHM来导出(开源软件) 三、采用DBExportDoc V1.0 For MySQL来导出
  • Java Swing之数据库表结构导出工具(Excel、Word等)

    千次阅读 多人点赞 2021-04-16 09:43:38
    Java Swing之数据库表结构导出工具

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,121,765
精华内容 448,706
关键字:

数据库表结构

友情链接: chapter_four_suffix.zip