Database Design Guidelines

Principles

  • Support popular databases

Name Style

  • Table Name

    Style: Pascal

    Example: Employee

    It is fine that you may use the singular style or plural style. But singular style is preferred here.

  • Column Name

    Style: Pascal

    Example: HouseAddress

    Avoid to repeat table name in the column name, for example, For table 'Employee', use 'Name' for the column of employee name.

  • Primary Key Name

    Style: Pascal, PK_${TableName}

    Example: PK_Employee

  • Index Name

    Style: Pascal, UK_\({Column1Name}_\){Column2Name} for unique indexes.

    Use IK_\({Column1Name}_\){Column2Name} for non-unique indexes.

    Example: UK_Code

  • Foreign Key Name

    Style: Pascal, FK_\({Column1Name}_\){Column2Name}

    Example: FK_DepartmentId

Columns

Text columns

  • Do use unicode data type to define text columns.
  • Do use nvarchar for variable length text columns.

Date/Date Time

  • If the value of a date column is expected to present same text result among different time zone, use numeric or text data type to define date/date-time columns.

    If we define a column with date data type, default, most program language will use date-time type to store values from the column, we should realize the date value will be changed when the data is transited to a different time-zone. For example:

    2001/01/15, On the database server, timezone is +8.

    2001/01/15, On the application server, timezone is +8.

    2001/01/15 01:00:00, On the client, timezone is +9.

    So if it is a problem to you, try to use a integer or text data type to store the value.

Tips: consider the case carefully. ask these questions:

If your application will be used in different time-zone?

If you only use date part for the column?

If you only use time part for the column?

Nullable

  • Avoid to define a column as nullable.

    Avoid to use null would reduce programing bugs, and bring better performance.

  • Do Not use null for numeric columns if it has same meaning as zero.

  • Do Not use null for text columns if it has same meaning as empty.

  • May use null in a reference column provide that null is acceptable.

Keys

Primary Keys

  • Do create a primary key for any tables.
  • Recommend to use one column for the primary key.
  • Use '${TableName}Id' for the name of the primary key column, the column is denoted as 'Id' columns.
  • Recommend to use integer data type for the primary key column.
  • Avoid change the value of the primary key column after created.
  • It is acceptable to show the the value of the primary key column to customers if need.

Foreign Keys

  • Do create a foreign key if there is a relation between 2 tables.

    It is useful to keep data integrity.
  • Carefully use delete cascade clause when creating the foreign keys relationship.

Tips: Be careful, Use delete cascade is also dangerous. consider it twice before use it.

Database-specific constraints

  • Avoid to use reversed words for name of objects of databases

Tips: please read the reversed words from database you will use

  • Avoid to use system prefix in your object names
  • Check length limitation of object names of databases

Tables

Entity Tables

Like departments, employee etc, we store these kind of information into entity tables.

In most case, the table like:

  • Definition sample
Employee {EmployeeId, Code, Name, DepartmentId, ...}.

If in your system, an employee only exists in one department, you may use above definition.

Tree Tables

Like most organization, departments will be constructed as a tree, there are some top level departments (or is a root department), except these top level departments, departments must have one and only have one parent department.

We define this kind of table as:

  • Definition sample
Department{DepartmentId, Code, Name, **ParentId**, ...}.

In most case, for the usage convenience, we will define a tree table for each tree relationship, denoted as a tree table.

  • Definition sample

    DepartmentTree{ParentId, ChildId}.

    For a parent department, The table stores itself and all its descendants.

    From a view of a child department, the table stores itself and all its ancestors.

Hierarchical Tables

Different as tree tables, in the hierarchical tables, a child would have 0 to n parents.

For example, groups and users:

  • Rules

    • an user would exists in multiple groups.
    • an groups would exists in multiple groups.
  • Definition sample

User(userId, Name, isGroup)
GroupUser(parentId, userId)
GroupUserTree(parentId, userId)

The table GroupUser stores the direct relationships.

Instead, the table GroupUserTRee stores the redundant relationships like tree tables above.

Database Design Guidelines的更多相关文章

  1. [书籍]重温《Framework Design Guidelines》

    1. 前言 最近重温了<Framework Design Guidelines>. <Framework Design Guidelines>中文名称为<.NET设计规范 ...

  2. 数据库设计(二)Introduction to Database Design

    原文链接:http://www.datanamic.com/support/lt-dez005-introduction-db-modeling.html Introduction to Databa ...

  3. Test Design Guidelines for Reusability

    Last Updated: JAN.10.2008 From: http://safsdev.sourceforge.net/sqabasic2000/TestDesignGuidelines.htm ...

  4. Dynamic Library Design Guidelines

    https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/DynamicLibraries/100 ...

  5. SAP成都C4C小李探花:浅谈Fiori Design Guidelines

    Jerry: 我和周帅认识不久,自去年7月SAP成都研究院Cloud for Customer(以下简称为C4C)开发团队组建至今,根据这段时间和周帅愉快的合作经历,我觉得如果把周帅比作我读过的小说里 ...

  6. database design three form

    https://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html

  7. Database Design for Sexbale Forum

    Mars March 17, 2015

  8. API Design

    REST API Design Guidelines V 1.0.201208 Draft 5 Last Updated: 08/31/2012 1       简介 本文档旨在规范REST API的 ...

  9. 【DB】database introduction

    database applications: – Banking System,– Stock Market,– Transportation,– Social Network,– Marine Da ...

随机推荐

  1. spring3——IOC之基于XML的依赖注入(DI )

    我们知道spring容器的作用是负责对象的创建和对象间关系的维护,在上一篇博客中我们讲到spring容器会先调用对象的无参构造方法创建一个空值对象,那么接下来容器就会对对象的属性进行初始化,这个初始化 ...

  2. Python学习之再议row_input

    再议raw_input birth = raw_input('birth: ') if birth < 2000: print '00前' else: print '00后' 运行结果: bir ...

  3. tornado解决高并发的初步认识牵扯出的一些问题

    #!/bin/env python # -*- coding:utf-8 -*- import tornado.httpserver import tornado.ioloop import torn ...

  4. CMDB开发

    浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...

  5. Nginx配置特定二级域名

    首先把先在域名设置页面把二级域名解析到服务器的公网IP上,这里假设是 bbs.domainname.com 然后编辑 /etc/nginx/sites-available/domain.com.con ...

  6. Java-NIO(四):通道(Channel)的原理与获取

    通道(Channel): 由java.nio.channels包定义的,Channel表示IO源与目标打开的连接,Channel类似于传统的“流”,只不过Channel本身不能直接访问数据,Chann ...

  7. MyBatis(一):配置并使用

    MyBatis具体是什么东东,这些在后边在研究吧,本文目的是为了记录如何使用MyBatis. 首先,需要下载MyBatis开发所需要文件. 通过github上可以找到MyBatis代码:https:/ ...

  8. 初学Java Web(9)——学生管理系统(简易版)总结

    项目开始时间:2018年4月8日14:37:47 项目完成时间:2018年4月9日10:03:30 技术准备 这个项目是自己用于巩固 J2EE 相关知识的练手项目,非常简单,但是相关的功能却非常实用, ...

  9. nodejs+express+mysql 增删改查(二)

    1.最早一篇关于express框架简单的增删改查文章,http://www.cnblogs.com/zhengyeye/p/nodejs.html#3947308:意外走红博客园,无奈自己之前一直没有 ...

  10. 前端之旅HTML与CSS篇之block与inline的区别

    display:block;和display:inline;的区别block元素特点: 1)处于常规流中时,如果width没有设置,会自动填充满父容器 2)可以应用margin/padding 3)在 ...