`
rensanning
  • 浏览: 3513313 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37464
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:604269
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:677956
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:87221
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:399787
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69055
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:90447
社区版块
存档分类
最新评论

基础知识 - 数据库设计

 
阅读更多
基于Data设计Schema、基于Query设计Index!

首先要了解RDBMS vs. NoSQL、OLTP vs. OLAP的区别,然后要掌握以下必备知识,也可以Google一下“Database Best Practices”看看别人的经验总结。

必备理论知识
  • 范式:Database Normalisation
  • 反模式:Database Anti-Patterns/Denormalization
  • 分库分表:Shard(Partition)
  • 数据冗余:Data Redundancy
  • 科德十二定律:Codd's 12 Rules
命名规则 (Naming Conventions)
0)基本规则
  • 全部小写
  • 下划线分割单词(只使用字母,数字和下划线)
  • 避免使用无意义的数字
  • 避免使用保留字/关键字
  • 名称要简单且具有描述性
  • 使用英语不要用拼音
1)表名
  • 表名用单数
  • 2到3个单词
  • 最长30字符
  • 避免缩写简写(如果单词很长可以使用常用简写比如i18n)
  • 关联表使用相同前缀单词 比如:activity_status, activity_type
  • 避免无意义的前缀(t_、tbl_、TB_、VW_、SP_)
  • 避免应用名前缀(MyApp_User、MyApp_Teams)
--migration用的schema_version表(当前版本,最近更新时间等)
--编码表/字典表/全局设置表(国家、城市、货币等)

2)字段名
  • 是否应该全数据库唯一?
  • 标示表的前缀?
  • 单字段主键最好用id
  • 外键字段<TableName>_id
  • 日期字段xxx_date
  • 时间字段xxx_time
  • 布尔字段is_xxx 或 has_xxx
  • 避免数据类型后缀(name_tx、date_dt)
--合理选择数字Number、时间Date的类型
--不要存储图像等blob数据(必须的话不要放入频繁访问的表中)
--合理设置列的宽度(使用英语以外的语言时考虑编码)
--用UTC的方式存储日期与时间
--常用字段(ID、状态、删除标志、创建者、创建时间、更新者、更新时间)
--姓名字段考虑外国人时要分开
--主键最好为整型值
--越少越好(表的个数、字段个数、主键的字段个数)
--在冗余和速度之间找平衡

以下是一些设计时常见的数据结构:

(一)可扩展的数据模型 Extensible Data Modeling
http://www.slideshare.net/billkarwin/extensible-data-modeling
避免ALTER TABLE,常用于:CMS、EC。
1)预留字段Extra Columns
2)属性表Entity-Attribute-Value:EAV模型(metadata、attributes、entities、attribute_values)
3)序列化字段Serialized LOB & Inverted Indexes(XML/JSON/YAML等)
4)表继承Class Table Inheritance
需要权衡以下内容:
灵活性Flexible、检索Select、过滤Filter、索引Indexed、数据类型DataTypes、约束Constraints(NOT NULL、外键、唯一约束等)。

(二)基于角色的访问控制 RBAC(Role-Based Access Control)
用于用户权限管理:用户Users、用户组Groups、角色Roles、目标Objects、访问模式Access Mode、操作Operator。
http://rongxh2010.iteye.com/blog/930648

(三)层次数据 Hierarchical Data
用于分类、组织、文件夹等。
动态菜单Dynamic Menus的设计。
http://www.slideshare.net/billkarwin/models-for-hierarchical-data
http://www.slideshare.net/ehildebrandt/trees-and-hierarchies-in-sql
http://www.sitepoint.com/hierarchical-data-database/

(四)ID/PK的生成策略
http://rensanning.iteye.com/blog/2149685

(五)密码的存储 Password
http://stackoverflow.com/questions/1054022/best-way-to-store-password-in-database

(六)多语言 Multi-Language
多个表,多个字段、多个记录、额外的表
http://www.cnblogs.com/studyzy/archive/2013/04/03/2998322.html
http://stackoverflow.com/questions/316780/schema-for-a-multilanguage-database

(七)标签 Tags
http://tagging.pui.ch/post/37027745720/tags-database-schemas

(八)历史数据 Historical/Archive/AuditTrail
Row级别、Column级别、Log表(操作日志,登录日志)
http://www.codeproject.com/Articles/105768/Audit-Trail-Tracing-Data-Changes-in-Database
http://database-programmer.blogspot.com/2008/07/history-tables.html

(九)工作流 Workflow
http://www.exceptionnotfound.net/designing-a-workflow-engine-database-part-1-introduction-and-purpose/

(十)信息流/通知 Feeds/Notification/Message
http://highscalability.com/blog/2013/10/28/design-decisions-for-scaling-your-high-traffic-feeds.html

(十一)状态标识位 Flags/Indicators/Enumeration
单列
true/false VARCHAR(4) boolean
yes/no VARCHAR(3)
Y/N CHAR(1)
0/1 CHAR(1) INT
*** 常见的是以int定义居多。

多列
多个字段:同一张表中添加多个标识列定义通单列
1个字段:二进制位的字段(1101:13)

(十二)第三方登录 Third-Party Signin


比较早的一份数据库设计指南TechRepublic database design guide,主要针对Access的,可以用来参考。
分享到:
评论

相关推荐

    03-数据库课程设计任务书-银行储蓄系统数据库设计.doc

    设计目的: " "按照关系型数据库的基本原理,根据数据库设计方法,综合运用所学的知识 " ",设计开发一个小型的数据库-银行储蓄系统数据库。熟练掌握相关数据库的" "分析、设计、实现过程,以及在此数据库基础之上对...

    数据库系统---数据库设计.pdf

    基于 3NF 的数据库设计⽅法是由 S.Atre 提出的数据库设计的结构化设计⽅法,其基本思想是在需求分析的基础上,识别并确认数据库 模式中的全部属性和属性间的依赖,将它们组织成⼀个单⼀的关系模型,然后再分析模式...

    软考-数据库工程师教材(第四版) pdf

    - 编程语言基础知识 - 数据结构与算法 - 软件工程的基本理论与实践 2. **网络与通信**: - 计算机网络原理及其应用 - 网络安全相关知识 3. **数据库系统理论**: - 关系数据库理论 - 数据模型与数据库设计...

    14-数据库课程设计任务书-某客运公司运输管理系统数据库设计.doc

    设计目的: " "按照关系型数据库的基本原理,根据数据库设计方法,综合运用所学的知识 " ",设计开发一个小型的数据库- 某客运公司运输管理系统数据库。熟练掌握 " "相关数据库的分析、设计、实现过程,以及在此...

    29-数据库课程设计任务书-某旅行社管理系统数据库设计.doc

    设计目的: " "按照关系型数据库的基本原理,根据数据库设计方法,综合运用所学的知识 " ",设计开发一个小型的数据库-某旅行社管理系统数据库。熟练掌握相关数据" "库的分析、设计、实现过程,以及在此数据库基础之...

    13-数据库课程设计任务书-某汽车美容店管理系统数据库设计.doc

    设计目的: " "按照关系型数据库的基本原理,根据数据库设计方法,综合运用所学的知识 " ",设计开发一个小型的数据库- 某汽车美容店管理系统数据库。熟练掌握相 " "关数据库的分析、设计、实现过程,以及在此数据库...

    数据库课程设计大纲简要

    - 数据库设计的基本概念 - 需求分析 - 概念设计(ER模型) - 逻辑设计(关系模式设计) - 物理设计 - 数据库设计案例分析 4. SQL语言及应用 - SQL的基本语法与操作 - 数据查询 - 数据定义(DDL) - 数据...

    花店管理系统-数据库设计.doc

    数据库设计;花店管理系统 1 概述 随着人们的物质生活水平的不断提高和社会的进步,人们表达情感的方式也大不一样 ,比如,在情人节里会送给自己心仪的人一束鲜艳欲滴的玫瑰,在三.八妇女节会送给妈 妈一束美丽的...

    数据库设计基础知识概述.pptx

    数据库设计基础知识概述.pptx

    图书管理系统--数据库课程设计报告.doc

    现在利 用自己学到的知识设计并制作一个图书管理系统,这本身就是一个知识转化为生产力的 过程,所以大家都很兴奋,不同程度的投入了很高的热情与努力。 在具体的设计与实施中,我们看到并感受到了一个管理系统从无...

    软件开发技术--数据库

    详细讲解了数据库设计过程以及数据库的各种基础知识。

    MySQL学习笔记1-数据库基础.md

    然后讲解了数据库设计的相关知识。最后介绍了数据库的备份、恢复方法,以及使用实例说明了数据库的基本操作。内容全面系统地概括了数据库和SQL语言的基础知识。 适合人群: 需要学习数据库基础知识和SQL语言的初学者...

    数据库设计基础知识.pdf

    数据库设计基础知识.pdf

    公共基础知识数据库设计基础课件

    这是我多年从事全国计算机等级考试二级公共基础知识培训的课件(第四章),PDF格式中没有原来PPT格式中的动画效果。

    超市会员管理系统-数据库课程设计(2).doc

    课程设计目的 通过课程设计加深对数据库基础理论和基础知识的理解,掌握运用数据库管理系统, 实现数据管理的基本思路和方法,培养分析问题、解决问题的能力。 2.系统功能设计 2.1功能模块图 功能模块图如图1。 图1 ...

Global site tag (gtag.js) - Google Analytics