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. javaScript识别网址文本并转为链接文本

    最近项目有个需求:用户之间发送消息时,如果发送者输入的信息中含有网址文本,要在接受者界面中显示网址链接,点击该链接直接跳转到网页.这个功能和 QQ 发送网址文本的效果非常像,可以说是一模一样的. 思路 ...

  2. SpringCloud的DataRest(四)restful特性展示

    一.get - list - http://10.110.20.16:8391/BusiSys/company?page=0&size=5&sort=comp_id,asc 二.pos ...

  3. SpringBoot应用的启动方式

    一:IDE 运行Application这个类的main方法 二:在SpringBoot的应用的根目录下运行mvn spring-boot:run 三:使用mvn install 生成jar后运行 先到 ...

  4. centos7 yum相关的常用命令

    [root@mini1 ~]# history |grep yum 40 yum repolist 42 cd /etc/yum.repos.d/ 49 yum clean all 50 yum re ...

  5. tornada模板学习笔记

    import tornado.web import tornado.httpserver import tornado.ioloop import tornado.options import os. ...

  6. Hive函数:CUME_DIST,PERCENT_RANK

    参考自:大数据田地http://lxw1234.com/archives/2015/04/185.htm 数据准备: d1,user1, d1,user2, d1,user3, d2,user4, d ...

  7. Spring(二):Spring框架&Hello Spring

    Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架. Spring 框架 ...

  8. javascript的变量声明、数据类型

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. Scale

    Scale刻度组件. 当你希望用户输入某个范围内的一个数值,使用scale组件可以很好的代替Entry组件. 用法: 创建一个指定范围的Scale组件其实非常容易,你只需要指定from和to两个选项即 ...

  10. JS面向对象特性和值类型与复合类型

      JS面向对象之特性已经值类型与复合类型 一些属性 空对象 空对象也是对象, 只是有存变量的变量名, 没有对象属性 var o ={}; 参数传递 值类型: 函数内外两个变量, 两个数据, 都不相同 ...