`
tomcat_oracle
  • 浏览: 317551 次
社区版块
存档分类
最新评论

谈谈数据库的字段设计的几个心得

阅读更多
数据库的字段设计有很多细节性的技巧,下面将过去在开发中体会到经验整理出来,做个备忘。
  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主键作为判断依据(程序上的失误,改动比起数据库设计失误改动容易得多。因为你数据已经入库了。在修改起来就比较难了)。
8
2
分享到:
评论
4 楼 wb284551926 2014-02-25  
直接用uuid不是更好
3 楼 ray_yui 2014-02-24  
QuarterLifeForJava 写道
请教个问题,主键不让它自增,采用人为自增是否可取?即,比如数据库现在有三条数据,主键ID值为1,4,5;我插第四条数据时,ID为:select max(id) from tableName,此时为5,然后我新增的数据ID即为5+1=6

這個使用Oracle的Seuqnece是可以的.因為當獲取新序列時數據庫端已經進行了自增.但若然使用Mysql等就要考慮幷發問題.有可能你獲取的max(id)已經是過時的
2 楼 qinyunqiang 2014-02-23  
mysql自增字段可以设置不同的步长
例如:一个mysql自增 1,3,5,7.. 另一个mysqlID自增 2,4,6,8...
1 楼 QuarterLifeForJava 2014-02-23  
请教个问题,主键不让它自增,采用人为自增是否可取?即,比如数据库现在有三条数据,主键ID值为1,4,5;我插第四条数据时,ID为:select max(id) from tableName,此时为5,然后我新增的数据ID即为5+1=6

相关推荐

    易语言数据库字段求和

    此外,如果数据库中的数据量非常大,你可能需要考虑性能优化,如使用存储过程,或者在数据库设计阶段就优化表结构和索引。易语言虽然不是数据库优化的专家工具,但通过合理的设计和编程技巧,仍然能有效处理大数据...

    数据库字段命名规范

    数据库字段命名规范是数据库设计的重要环节,良好的命名规范可以提高数据库的可读性、可维护性和可扩展性。以下是数据库字段命名规范的详细介绍: 一、数据库表名命名规范 * 数据库表名在命名时,首字母大写,用...

    为数据库表设计可扩展的字段

    在数据库设计中,确保表结构具有良好的扩展性是至关重要的,因为这直接影响到系统的灵活性、维护...通过灵活运用范式理论、EAV模型、扩展字段和ORM工具,我们可以创建出既适应当前需求,又能适应未来变化的数据库设计。

    数据库字段名转换成Java字段名

    - 工厂模式:可以创建一个字段名转换工厂,根据输入的数据库字段名,返回对应的Java字段名对象。 - 模板方法模式:定义一个转换模板,子类可以重写具体转换逻辑。 7. **注解驱动**: 在某些情况下,如使用JPA,...

    JTT 1058-2016 交通运输信息系统 数据库字段命名及属性定义1

    一个字段的属性定义直接关系到数据的准确性和处理方式,因此合理定义字段属性对于数据库的稳定性与数据安全至关重要。 综上所述,JTT 1058-2016标准的实施,为交通运输行业的信息系统数据库管理提供了一套科学、...

    C# 作的动态定义数据库字段

    在传统的数据库设计中,表的结构是静态的,即在创建表时就已经定义好了列名和数据类型。然而,在某些场景下,用户可能希望在程序运行过程中根据需求添加、删除或修改这些字段。这可以通过使用元数据(Metadata)和...

    制造业ERP系统需求与数据库字段设计

    我们精心打造了《制造业ERP系统需求与数据库字段设计》文档,为制造业的ERP系统设计提供了全面的需求分析与数据库字段示例,是帮助您快速构建系统的必备参考。 本资料详细覆盖了生产、采购、库存、销售、财务、人事...

    动态添加数据库字段.md

    动态增加数据库字段,如在页面上 填写 字段名、字段类型,通过Java后端,数据库的表就会自动的添加字段。

    一键填充数据库字段名.rar

    这通常是为了提高数据录入的效率,尤其是在数据库设计阶段或需要大量手动输入字段信息时。"ecology" 这个标签可能意味着这些工具或脚本与生态学或环保相关的项目有关,或者可能是特定项目或系统的命名约定。 描述中...

    数据库字段属性1

    "数据库字段属性详解" 数据库字段是数据库管理系统中最基本的组成部分,它定义了数据在数据库中的存储结构和约束关系。...通过了解数据库字段类型、约束、默认值和索引等知识点,我们可以更好地设计和管理数据库。

    java实体类字段自定义-数据库字段和程序实体类属性不一致解决方案.docx

    例如,实体类中有一个字段名为 "userName",而数据库表中的字段名为 "USER_NAME"。这种情况下,需要实现实体类字段的自定义,以便与数据库字段保持一致。 二、解决方案 解决 Java 实体类字段自定义问题的思路是...

    数据库字段图

    数据库字段图

    Delphi数据库字段替换工具附源码..rar

    这个“Delphi数据库字段替换工具附源码..rar”文件显然包含了一个用Delphi编写的数据库字段替换工具的源代码,这为学习和理解Delphi数据库编程提供了宝贵的资源。 1. **Delphi编程基础**: Delphi基于Pascal语言,...

    android系统内置数据库字段描述

    在Android系统中,数据库是一种重要的数据存储方式,尤其对于开发者来说,理解系统内置数据库的字段描述...因此,深入研究和理解Android系统内置数据库的字段描述对于任何Android开发者来说都是一个基本且重要的技能。

    金蝶K3数据库字段和表结构

    金蝶K3数据库字段和表结构,用于对金蝶数据库底层的修改维护,以及查找相关数据使用的。

    用友T6数据库字段说明

    T6的数据库字段说明文档,包含数据库中基本是所有的table的说明

    自动读取mysql数据库字段并自动生成java属性和set和get方法

    为了提高开发效率,一种常见的解决方案是实现一个工具或框架,能够自动从数据库读取字段信息,并自动生成对应的Java代码。 这个工具或功能的核心思想是元数据映射(Metadata Mapping),它将数据库中的表结构映射到...

    数据库字段导出工具

    数据库字段导出工具是一款专为数据库管理和数据操作设计的实用软件。它简化了数据库中字段信息的导出和查询过程,使得用户无需深入掌握复杂的SQL语句,只需输入基础的数据库连接信息,如服务名、用户名和密码,就能...

Global site tag (gtag.js) - Google Analytics