文档章节

转载:关于数据库设计Database Skills

hxf10047
 hxf10047
发布于 2015/12/23 16:59
字数 853
阅读 17
收藏 0

首先要了解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 
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 

其他 

  • 下次自动登录Remember Me

  • 邀请码 Invite Code

  • 第三方登录 Third-Party Signin


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


© 著作权归作者所有

hxf10047
粉丝 1
博文 26
码字总数 11602
作品 0
高级程序员
私信 提问
ylbtech-QQ(腾讯)-群空间-数据库设计

ylbtech-DatabaseDesgin:ylbtech-QQ(腾讯)-群空间-数据库设计 DatabaseName:QQ-群空间 Model:群相册、群共享、群论坛、群成员、留言板、公告。6个模块。 Type:空间-群空间、论坛 Url:http:/...

吞吞吐吐的
2017/10/18
0
0
web-ylbtech-数据库备份-数据库设计

ylbtech-DatabaseDesgin:web-ylbtech-数据库备份-数据库设计 DatabaseName:ylbtech Model:备份 Type:数据库备份设计 Url: 1.A,数据库关系图(Database Diagram) 1.B,数据库设计脚本(Databa...

吞吞吐吐的
2017/10/19
0
0
ylbtech-KeFuYunWei(服务运维考核系统)-数据库设计

ylbtech-DatabaseDesgin:ylbtech-KeFuYunWei(服务运维考核系统)-数据库设计 DatabaseName:KEFUYUNWEI Model:Admin 用户后台管理数据设计 Type:管理软件 Url: 1.A,数据库关系图(Database Dia...

吞吞吐吐的
2017/11/16
0
0
ylbtech-Model-Account(通用账户模块设计)

ylbtech-DatabaseDesgin:ylbtech-Model-Account(通用账户模块设计) ylbtech-Model-Account(通用账户模块设计) 1.A,数据库关系图(Database Diagram) 1.B,数据库设计脚本(Database Design Sc...

吞吞吐吐的
2017/09/06
0
0
ylbtech-czgfh(财政规范化)-数据库设计

ylbtech-DatabaseDesgin:ylbtech-czgfh(财政规范化)-数据库设计 DatabaseName:czgfh(财政规范化) Model:账户模块、系统时间设计模块、上报自评和审核模块 Type:政府办公 Url: 1.A,数据库关系...

吞吞吐吐的
2017/10/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
43
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部