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

基础知识 - 数据库设计

 
阅读更多
基于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的,可以用来参考。
分享到:
评论

相关推荐

    数据库设计指南-数据库设计教程

    下面,我将根据标题和描述,以及可能包含在"db_design_tips.pdf"中的内容,为你详细阐述数据库设计的关键知识点。 1. **数据库概念理解**:数据库是存储和组织数据的系统,它提供数据的结构化存储和访问。理解关系...

    二、用友T6产品维护-数据库基础知识.ppt

    用友T6产品维护-数据库基础知识 用友T6产品维护-数据库基础知识是用友T6产品维护系列的一部分,旨在为用户提供数据库基础知识的学习和实践指南。本资源摘要信息将概括用友T6产品维护-数据库基础知识的主要内容,...

    ASP教程---数据库基础知识.pptASP教程---数据库基础知识.ppt

    ASP教程中的数据库基础知识主要涵盖了数据、数据库、数据库管理系统和数据库系统的概念,常用数据库软件的介绍,数据库设计的步骤,以及SQL操作语句的使用。以下是对这些知识点的详细阐述: 1. **数据与数据库**: ...

    第1章--数据库基础知识-习题.doc

    综上所述,数据库基础知识涵盖了数据管理的理论和实践,包括数据库系统与文件系统的区别、数据库的逻辑独立性、关系模型的概念、数据库设计的各个阶段、Access的功能和操作等。了解这些基础知识对于理解和操作数据库...

    第-章-数据库基础知识优秀文档.ppt

    掌握这些基础知识对于理解和操作数据库至关重要,无论是开发数据库应用程序、设计数据库架构还是进行数据分析,这些概念都是不可或缺的。随着技术的不断发展,数据库管理系统的功能和复杂性也在不断进化,因此持续...

    软件工程研究生的课程---数据库设计开发.rar

    PPT文件的命名暗示了课程内容的结构,可能包括数据库的基础知识(0-2、0-3、0-4),数据建模(2.1、2.2),以及Oracle数据库的深入探讨(4.1、4.2、4.3、4.4)。5.2可能是关于数据库性能优化或高级话题,如事务处理...

    大学计算机基础--数据库基础知识.pdf

    根据提供的文件信息,内容似乎是一本关于数据库基础知识的教材,涉及的关键字和内容主要集中在数据库管理系统(DBMS)、Visual FoxPro以及关系型数据库的一些基本概念。接下来将详细说明这些知识点。 数据库管理...

    CMMI-数据库设计说明书模板.doc

    - **编写目的**:该文档旨在为CMMI(能力成熟度模型集成)框架下的数据库设计提供一个标准化的模板,帮助组织在进行数据库设计时遵循一定的规范和流程,确保设计的合理性和一致性。 - **背景**:随着信息技术的发展...

    09-数据库设计.ppt

    设计数据库需要掌握数据库基础知识和设计技巧,计算机科学基础,程序设计方法和技巧,软件工程原理和方法,以及特定应用领域的知识。这些知识是确保数据库设计质量和效率的基础。 3.3 数据库设计的特点: 数据库...

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

    这个汽车美容店管理系统数据库设计涵盖了数据库设计的多个方面,不仅锻炼了学生的理论知识,也强化了他们的实际操作能力。通过这个项目,学生将能够深入理解数据库系统在实际业务场景中的应用,为未来从事相关工作...

    北京大学软件工程研究生的课程---数据库设计开发

    数据库设计开发涵盖多个关键知识点,首先,我们需要了解关系数据库的基础,包括关系模型、ER(实体-关系)模型以及如何用SQL(结构化查询语言)进行数据操作。在关系模型中,理解键、候选键和主键的概念,以及如何...

    北电软件工程研究生的课程-数据库设计开发 01.ppt

    【标题】"北电软件工程研究生的课程-数据库设计开发 01.ppt" 提供的是一个关于数据库设计与开发的课程,很可能是北京邮电大学(简称“北电”)软件工程研究生阶段的课程资料。这个课程的核心是教授如何有效地设计和...

    数据库课程设计-数据库设计.docx

    文档中还列出了多本参考书籍,这些书籍涵盖了数据库系统设计的基础理论、实践案例等多个方面,对于深入学习数据库设计非常有帮助。此外,文档中还给出了多个术语的解释,如“精简并行过程”、“实体关系模型”等,这...

    赢在起点-数据库设计规范 梁敬彬大牛的经验之谈

    本文将深入解析该主题中的关键知识点,帮助读者理解并掌握数据库设计的核心原则。 1. 数据库设计基础:数据库设计始于需求分析,包括明确业务目标、收集数据需求、识别实体和关系。实体-关系模型(E-R Model)是...

    数据库应用系统开发2-数据库设计

    为了更好地进行数据库设计,我们需要掌握一些基础知识和技术,比如ERwin数据建模工具的使用。 **ERwin数据建模** ERwin是一款广泛应用于数据库设计的数据建模工具,可以帮助开发者创建、管理和文档化数据模型。...

    数据库基础知识-东南大学

    《数据库基础知识》课程由东南大学提供,是一套全面而深入的学习资源,旨在帮助学生掌握数据库设计、管理和优化的基本理论与实践技能。 一、数据库概念 数据库(Database,简称DB)是一种有组织地存储和管理数据的...

    第-章-数据库设计优秀文档.ppt

    数据库设计是信息系统开发过程中的关键环节,它涉及到数据的组织、存储、管理和访问,旨在创建一个高效、稳定、适应用户需求的信息基础设施。本章主要涵盖了数据库设计的基本概念、方法、步骤以及不同级别的模式。 ...

Global site tag (gtag.js) - Google Analytics