基于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产品维护-数据库基础知识 用友T6产品维护-数据库基础知识是用友T6产品维护系列的一部分,旨在为用户提供数据库基础知识的学习和实践指南。本资源摘要信息将概括用友T6产品维护-数据库基础知识的主要内容,...
ASP教程中的数据库基础知识主要涵盖了数据、数据库、数据库管理系统和数据库系统的概念,常用数据库软件的介绍,数据库设计的步骤,以及SQL操作语句的使用。以下是对这些知识点的详细阐述: 1. **数据与数据库**: ...
综上所述,数据库基础知识涵盖了数据管理的理论和实践,包括数据库系统与文件系统的区别、数据库的逻辑独立性、关系模型的概念、数据库设计的各个阶段、Access的功能和操作等。了解这些基础知识对于理解和操作数据库...
掌握这些基础知识对于理解和操作数据库至关重要,无论是开发数据库应用程序、设计数据库架构还是进行数据分析,这些概念都是不可或缺的。随着技术的不断发展,数据库管理系统的功能和复杂性也在不断进化,因此持续...
PPT文件的命名暗示了课程内容的结构,可能包括数据库的基础知识(0-2、0-3、0-4),数据建模(2.1、2.2),以及Oracle数据库的深入探讨(4.1、4.2、4.3、4.4)。5.2可能是关于数据库性能优化或高级话题,如事务处理...
根据提供的文件信息,内容似乎是一本关于数据库基础知识的教材,涉及的关键字和内容主要集中在数据库管理系统(DBMS)、Visual FoxPro以及关系型数据库的一些基本概念。接下来将详细说明这些知识点。 数据库管理...
- **编写目的**:该文档旨在为CMMI(能力成熟度模型集成)框架下的数据库设计提供一个标准化的模板,帮助组织在进行数据库设计时遵循一定的规范和流程,确保设计的合理性和一致性。 - **背景**:随着信息技术的发展...
设计数据库需要掌握数据库基础知识和设计技巧,计算机科学基础,程序设计方法和技巧,软件工程原理和方法,以及特定应用领域的知识。这些知识是确保数据库设计质量和效率的基础。 3.3 数据库设计的特点: 数据库...
这个汽车美容店管理系统数据库设计涵盖了数据库设计的多个方面,不仅锻炼了学生的理论知识,也强化了他们的实际操作能力。通过这个项目,学生将能够深入理解数据库系统在实际业务场景中的应用,为未来从事相关工作...
数据库设计开发涵盖多个关键知识点,首先,我们需要了解关系数据库的基础,包括关系模型、ER(实体-关系)模型以及如何用SQL(结构化查询语言)进行数据操作。在关系模型中,理解键、候选键和主键的概念,以及如何...
【标题】"北电软件工程研究生的课程-数据库设计开发 01.ppt" 提供的是一个关于数据库设计与开发的课程,很可能是北京邮电大学(简称“北电”)软件工程研究生阶段的课程资料。这个课程的核心是教授如何有效地设计和...
文档中还列出了多本参考书籍,这些书籍涵盖了数据库系统设计的基础理论、实践案例等多个方面,对于深入学习数据库设计非常有帮助。此外,文档中还给出了多个术语的解释,如“精简并行过程”、“实体关系模型”等,这...
本文将深入解析该主题中的关键知识点,帮助读者理解并掌握数据库设计的核心原则。 1. 数据库设计基础:数据库设计始于需求分析,包括明确业务目标、收集数据需求、识别实体和关系。实体-关系模型(E-R Model)是...
为了更好地进行数据库设计,我们需要掌握一些基础知识和技术,比如ERwin数据建模工具的使用。 **ERwin数据建模** ERwin是一款广泛应用于数据库设计的数据建模工具,可以帮助开发者创建、管理和文档化数据模型。...
《数据库基础知识》课程由东南大学提供,是一套全面而深入的学习资源,旨在帮助学生掌握数据库设计、管理和优化的基本理论与实践技能。 一、数据库概念 数据库(Database,简称DB)是一种有组织地存储和管理数据的...
数据库设计是信息系统开发过程中的关键环节,它涉及到数据的组织、存储、管理和访问,旨在创建一个高效、稳定、适应用户需求的信息基础设施。本章主要涵盖了数据库设计的基本概念、方法、步骤以及不同级别的模式。 ...