数据库的设计必须符合三个范式(极端要求常用高速时考虑单独设置记录表除外)。
用整形代替浮点型float,DECIMAL等,有的语言浮点计算是不精准的,如int存最小单位。金额用分, 重量用克等
//价格分 public function getPriceFen($priceFen) { return max(intval($priceFen), 1); }
数据库名称应该由概述项目内容的小写英文名词组成,以下划线分隔单词,避免跨平台时可能出现的大小写错误。数据表名称应该由物件对象名称的小写英文名词组成(尽可能对应系统中的业务类名称),以下划线分隔单词,避免跨平台时可能出现的大小写错误。
数据表的字段应避免使用varchar、 text等不定长的类型,时间信息的字段使用unixtiemstamp类型存储。查询数据时禁止使用*通配符避免占用资源加速处理速度,尽量避免使用临时表。查询数据连接多表时各资源应该使用全名称,即tableName.fieldName,而不是fieldName。SQL语句应尽可能符合ansi92标准,避免使用特定数据库对 SQL语言的扩充特性。开发结束后,必须针对SQL查询语句的条件语句部分(where)添加索引,须匹配多个条件的应该使用聚合索引。索引的组成应由左至右匹配条件语句的顺序。
严禁盲目添加索引,避免减慢数据插入的速度、增大占用空间及减慢查询速度。
每当数据库(表)发生结构性变化时须登记保存;日常须定时(不超过三个工作日)
备份数据库结构及其数据。
用filed='x'不要用filed="x"在mysql中,使用单引号和双引号俩种表达方法是一样的,尽管使用单引号的表达方法符合ANSI-SQL/92标准。当修改了mysql的sql模式的时候(set @@global.sql_mode)的时候,选择不同sql模式,可能会出现单引号和双引号的区别。用的双引号,sql语句执行错误.可以看出,尽量还是使用单引号
数据库的字段设计有很多细节性的技巧,下面将过去在开发中体会到经验整理出来,做个备忘。
- tinyint 是-128到128 。当属性设置为unsigned的时候。最大值就是255了。现在知道为什么需要设置为unsigned属性了。原来是为了最大限度的使用给予的存储空 间。如果不设置。那么假如你的值都是正数的。那么-128这一百多个数字就相当于是浪费了。
- tinyint会自动设置为tinyint(3)。
- smallint 不设置unsigned的时候,也有3万多的样子。
- tinytext 就是255个字节。大概就是存储127个中文的样子 tinytext就相当于varchar类型。把它看成这样的该类型就容易理解了。
- int 类型phpmyadmin默认会设置int(10)。
- 概念纠正:原来一直以为这里的10表示位数。直到有次想保存1101061021496,结果在字段中的值都变成了:4294967295。 看MySQL手册上说:
(int后面括号的数字)显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
- int的范围:-2147483648到2147483647。刚好是10个位,那么就是数十亿级别的数字。数据库设计经验:像订单的值非常大。不确定,如果达到10位数,还不如使用varchar类型。fangwei就没有使用int,而是varchar类型。
- 从上面也告诉我一个经验:如果保存在数据库的值都变成一样的。也就是无论我是1101061021496 还是1101061021569,结果都变成了固定的值,比如4294967295。那么可以考虑确认是否是数据库该字段的范围问题。这样的问题出现过好 几次了。就是没有掌握思路。导致浪费了不少时间。
- 将字段设置为not null 还出于另外一种考虑:mysql表的列中包含null的话,那么该列不会包含在所有中。也就是使用索引是无效的。所有,考虑今后会使用索引的字段,就要设置字段属性是not null。
- 如果你要保存NULL,手动去设置它,而不是把它设为默认值。
- 考虑到这个字段今后会作为查询关键字使用like的形式进行搜索。那么要将该字段定义成索引。这样使用like查询就会更快。
- 现在终于体会到到国外作者书籍上提到:设计数据库之前要问自己,之后会查询哪些数据。 考虑了这些,以后有什么查询需要。结构都能适应了。
关于设计大流量网站数据库,会员分表或者分库的设计考虑:
主键不要设为自增型。设置为自增型的后果就是:今后无法分离在不同的mysql数据库服务器上。比如id编号由于是自增的,所以两个数据库中可能会出现用户编号都是10005的情况。
但是,mysql主键会自动设置为自增型。可以用另外一个字段来作为标识符。而不是自增型id号。方法:新增一个字段作为行的标识符。具体设计:一个表做两个字段,一个是id作为主键,自增型,另外一个是uid,作为用户的标识。
程序判断上,是以uid作为判断用户的依据。而不是id主键作为判断依据(程序上的失误,改动比起数据库设计失误改动容易得多。因为你数据已经入库了。在修改起来就比较难了)。
相关推荐
### 数据库设计经验总结 #### 一、设计数据库之前的准备 **1.1 考察现有环境** 在设计新数据库之前,深入了解当前环境是非常重要的一步。这包括但不限于研究现有系统的架构、流程以及存在的问题。大多数情况下,...
在数据库设计过程中,有许多经验和技巧需要掌握。以下是对给定文件内容的详细解读: 1. **设计数据库之前** 在设计数据库之前,首先要对业务需求进行深入理解,确保能够准确反映业务流程。同时,对现有系统进行...
### 数据库设计经验谈 #### 第1部分-设计数据库之前 **考察现有环境** 在启动新的数据库项目之前,深入分析当前环境是至关重要的。很多时候,组织内部已经存在一些旨在解决特定问题的系统,尽管这些系统可能并非...
在设计数据库表时,需要考虑表内字段的设计和避免常见问题。这包括合理设置字段的数据类型、长度,以及是否允许为空。此外,考虑数据的冗余和一致性,尽量避免数据冗余以减少更新异常和插入异常的可能性。使用范式...
### 数据库设计之——数据库设计经验谈 在当今数字化时代,数据成为了企业运营的重要组成部分,而数据库则是管理和存储这些数据的核心工具。一个优秀的数据库设计能够极大地提升系统的性能、可靠性和可扩展性。本文...
### 数据库设计经验谈 #### 第一部分:设计数据库之前 **1. 考察现有环境** - **重要性**:在着手设计新的数据库之前,深入理解现有的业务环境和技术架构至关重要。 - **方法论**:这包括但不限于研究现有的业务...
### 数据库设计技巧经验浅析 #### 一、引言 数据库设计是软件开发中至关重要的环节,良好的数据库设计不仅能确保数据的有效存储与快速检索,还能为后续的应用扩展打下坚实的基础。根据“3分技术,7分经验”的原则...
在数据库设计领域,经验和理论同样重要。本文将探讨五个关键部分,帮助你提升数据库设计的效率和质量。 **第 1 部分 - 设计数据库之前** 在开始设计数据库之前,首先要对现有的环境进行深入的考察。这包括分析现有...
在设计数据库表时,应关注字段设计,避免常见的设计误区,如过度规范化或反规范化。合理选择主键,考虑使用系统生成的键,并理解何时以及如何为字段创建索引来优化查询性能。同时,数据完整性是数据库设计的另一核心...
数据库设计是软件开发过程中的关键环节,尤其是在大数据和云计算时代,高效、稳定、灵活的数据库设计对于系统的性能、可扩展性和数据安全性具有决定性影响。本文将深入探讨数据库设计的一些重要技巧,帮助程序员提升...
### 数据库设计经验谈 #### 一、设计数据库之前的准备 **考察现有环境** 在启动新的数据库项目之前,深入分析当前的业务环境和技术基础是非常重要的。这不仅涉及到对业务需求的理解,还包括对现有系统的评估。...
### 数据库优化经验谈 #### 一、查询语句(SELECT)优化建议 1. **合理使用索引** - 在WHERE子句中确保变量的顺序与索引关键字的顺序一致,以便最大化利用索引的优势。例如,如果索引为`create index test_idx ...
4. **精通数据库设计的高级程序员**:在积累了大量经验之后,这类程序员能够预见未来需求的变化,设计出具备前瞻性的数据库结构,减少未来的重构成本。 5. **数据库管理系统开发者**:这类程序员不仅精通数据库设计...
- **过度使用**:不应过度依赖触发器来处理业务逻辑,更推荐使用应用程序代码或约束来实现,以保持数据库设计的清晰和高效。 6. **示例**: - INSERT触发器示例:创建一个触发器,每当有新订单(向`Order Details...
本文主要探讨了数据库设计的一些实用技巧,适用于初入职场和有一定经验的数据库设计人员。 首先,数据库设计人员通常可分为五类: 1. 未系统学习过数据结构的程序员,他们的设计往往简单直接,但缺乏扩展性和关联性...
《赢在起点-数据库设计规范》是梁敬彬大师关于数据库设计的一份宝贵经验分享,主要涵盖了Oracle、MySql和DB2这三种主流数据库系统。本文将深入解析该主题中的关键知识点,帮助读者理解并掌握数据库设计的核心原则。 ...