`

关于设计表时应该注意的问题

阅读更多

关于设计表时应该注意的问题
如有错误欢迎大家指出。这段时间在家里,做了点修正。
1、慎重选择表名。
有两种选择:
按照多数开发语言的命名规则。比如( myCustomer )。
按照多数开源思想命名规则。比如( my_customer )。
按照咱们中国人的思想。比如(我的客户 )。
第一种有个缺点,很容易忘掉大写的字母。
第二种则比较好,每个 WORD间用下划线连接,避免遗忘。
第三种建议不要用,虽然很好记。不觉得解析这个表的时候还需要编码转化吗?我个人理解,大家可以补充。
2.  关于编码的设定。
A.             GBK/GB2312.(适用于纯中文存储)。
B.            UTF8.(适用于中英文混合存储)。
C.             LATIN1。(适用于纯英文存储)。
D.     其他的。
3.  关于表引擎的选择。
A.                  MYISAM.(很多人说她的表级锁定会带来好多问题,其实只要设计好对应的表以及写好对应的 SQL查询就没有那么大的问题。)
B.                   INNODB. (如果要用到事务,选择她不会错。至于多数人讲的 MASTER/SLAVE结构上用 INNODB MASTER的选择是否正确,就要看你怎么用了。不能一味的疯狂使用 INNODB。除非你想要确保非常高可用性,
C.                   CSV. (以前我写过文章,关于这个引擎。个人觉得最主要的是来存储少量数据以及从 EXCEL MYSQL的转换方面会很有用。当然只要涉及到规则数据的导入,她就可以办到。)
D.                  BLACKHOLE. (觉得最完美的用处在于 MASETR/SLAVE上面,并且 MASTER是一个临时的专门负责写的机器。不过缺点也很多,会与MYISAM或者INNODB或者其他的引擎有所冲突,这点自己要做个权衡)。
E.                   MEMORY. (应该说是 MYISAM的兄弟了。不过在读内存总比读磁盘的速度要快。不过要注意,它不支持动态数据类型)。
F.                   FEDERATED. (典型的分布式引擎。我以前文章中有介绍。)
G.    NDB。(网络版存储引擎。 因为Replication 总是有延迟,所以如果系统容不得任何延迟,就用这个吧。)
   H.    FOLCON。(6.0后用来代替INNODB的引擎。)

I.                  其他旧的以及新开发的引擎 具体介绍: http://dev.mysql.com/doc/refman/6.0/en/storage-engines.html )。
4.  关于属性数据类型的选择。
A.                  INT(一个字节的 TINYINT,两个字节的 SMALLINT,三个字节的 MEDIUMINT,四个字节的 INT 8个字节的 BIGINT。记住:UNSIGNED不管你定义或者不定义,都不影响内部的存储字节大小)
B.                   少于 10个字符用 CHAR是在合适不过了。(不过要记住在MEMORY引擎里面会自动把VARCHAR转化为CHAR)
C.                   我一般用 DECIMAL或者 NUMERIC来代替 FLOAT 或者 DOUBLE。因为老板要求精确的数字。如果不要求精确的,那就用FLOAT吧。速度快,占空间小。( DECIMA FLOAT(P)是动态存储。比如 :DECIMAL(10,2)占用 5个字节。 FLOAT 4个字节,)
D.                  BLOB TEXT,VARCHAR(一般存放文章内容,特别是新闻网站。需要的字节数是所存储的字符长度 +1。记住BLOB和VARCHAR是TEXT和CHAR的BINARY类型)
E.                   ENUM(在一定范围内绝佳的代替 VARCHAR CHAR的工具,因为她只占一到两个字节。)
F.                   时间和日期类型(占 3个字节的 DATE 8个字节的 DATETIME 4个字节的 TIMESTAMP 3个字节的 TIME 1个字节的 YEAR。)。如果要存储比如‘ 1983’这样的年份,用 YEAR明显比 VARCHAR或者 CHAR要节省空间。因为后者要占 5个字节。
G.                  BOOLEAN(用来存储 YES或者 NO之类的值,占用一个字节。)
H.                  关于自增字段。目前我们的项目中涉及到好多 ORDER BY RAND()操作。此类语句在数据库并发大的时候会造成 CPU严重阻塞,持续产生数据库死锁!解决此类问题最好的办法就是利用自增字段,用程序随即生成数字序列,或者在数据库端随即生成数字序列。
I.                     关于 ZEROFILL。非常好用的前置填补 0的存储,而不是用用对应个数的空串来代替。在需要前置补零的操作中 INT ZEROFILL可以用来代替 CHAR或者 VARCHR
5.  关于默认值。
A.                  5.0之后,只要设定字段为 NOT NULL,系统自动给出默认值。对应 CHAR->’’,INT->0,BOOLEAN->0等等。
B.                   5.0之前的版本,需要手动指定默认值,否则会出现一定的异常。到时候查都不好查了。
6.  关于多数据库建立。
A.                  应该把对应的业务放在各自不同的数据库里,而不是所有业务放到一个库里面。
B.                   数据库的命名和表命名一样。
7.  关于索引。
A.                  设计表初期尽量考虑到应该建立的索引。所有建立的索引一定要测试一下,看是否有必要,否则会翻倍的减少写数据的性能。
B.                   对于只有存储 0或者 1的列,尽量干掉索引,单独分出两个表。一个代替 0,另外一个代替 1。或者在一个字段里面用EMUM或者CHAR(0)或者CHAR(1)来代替。
   PS: 最后一个要值得注意的,就是尽量所有的字段用NOT NULL。虽然MYSQL可以对NULL列进行索引,不过我不建议。
分享到:
评论

相关推荐

    浅谈仪表自动化设计与施工服务时应注意的问题.rar

    浅谈仪表自动化设计与施工服务时应注意的问题.rar

    浅谈仪表自动化设计与施工服务时应注意的问题.pdf

    浅谈仪表自动化设计与施工服务时应注意的问题.pdf

    学生课堂注意力观察记录表.pdf

    学生课堂注意力观察记录表.pdf

    编写安全施工组织设计应注意的几个问题.doc

    编写安全施工组织设计应注意的几个问题 工程施工组织设计和安全施工组织设计,从表面上看无论从施工上和内容上有很多关联之处,可它又是包括不同内涵的两个文件。笔者认为在实际施工过程中还是分为两个文件,较为...

    日常仪表维护需要注意什么问题?

    过程检测与控制仪表是一项十分重要的内容,它是保证生产安全和平稳操作重要环节。 仪表是否正常动作,关系到化工生产的连续性和安全性问题。因此,做好仪表维护和检修工作就显得十分有必要。

    如何设计数据库表.doc

    设计表之后,常常会由于没有考虑时间的影响而导致以后出现严重问题。许多表设 计在当时使用时效果非常好,但是,常常会因为用户修改数据、添加数据以及随时间的 推移而崩溃。开发人员经常会发现需要重新设计表的...

    如何保证RTL 设计与综合后网表的一致性

    :在超大规模数字集成电路的设计中,我们使用逻辑综合工具来完成从RTL设计到门级网表的转化。...我们以Design Compiler为例,来说明设计RTL时应该注意的问题。在仿真和调试时,我们使用了NC-Verilog和Debussy。

    mysql数据库设置外键应该注意的几点

    NULL 博文链接:https://yanzhenwei.iteye.com/blog/850724

    华为硬件设计审查评审表

    华为硬件设计审查评审表,详细介绍了硬件设计审核需要注意和重点关注的部分

    传感器设计四个注意事项

    好的传感器的设计是经验加技术的结晶。一般理解传感器是将一种物理量经过电路转换成一种能以另外一种直观的可表达的物理量的描述。比如转换成仅依赖于此测物理量的较高的电压电流等信号,再显示出来。因此需要注意几...

    主从表关联问题

    一、使用视图meeting将多表关联整合在一起 二、通过Sql语句筛选数据 三、建立和主从表的关联 四、注意在CrystalReport1表中插入子报表的时候,一定要将主从表的关联字段设置好,否则出乱子

    开关电源PCB设计步骤注意事项

    在任何开关电源设计中,PCB板的物理设计都是最后一个环节,如果设计方法不当,PCB可能会辐射过多的电磁干扰,造成电源工作不稳定,以下针对各个步骤中所需注意的事项进行分析: 一、从原理图到PCB的设计流程建立元件...

    手表表盘界面设计收集及指针手表C程序

    (1)函数GUI_MEMDEV_CreateAuto和GUI_MEMDEV_DrawAuto的使用,保证时钟表盘不闪烁。 (2)抗锯齿多边形的绘制GUI_AA_FillPolygon。 2. 本设计界面仅支持演示。 3. 注意演示时间和指针旋转速度的设置,防止指针...

    毕业设计(论文)中期检查表

    本科计算机类毕业设计的中期检查表模板及其注意事项。一集一些参考

    用电脑并口设计万用表

    输出信号时,只要选中或取消引脚号,就能在相应的引脚得到相应的脉冲信号(统一为选中为高电平,取消为低电平),“清零”按钮为对应该组的所有信号清零。  输入信号的波形显示,按“开始”按钮为开始进行显示,...

    数据结构课程设计_顺序表的操作

    计算机的,注意了数据结构的课程设计 顺序表的操作

    多功能自行车码表设计

    介以及进行自行车运动的注意事项和自行车旅行的相关知识。 并会逐渐对该软件加以升级,使其功能更加完善,以满足广大使 用者的需求。 ⒑ 可以进入系统休眠方式以节省电能,并随时激活唤醒系统重 新进行工作。可以...

    单片机多功能秒表课程设计报告.doc

    基于51单片机控制的多功能秒表系统,完整的课程设计报告,可以直接下载。注意:本课程设计报告仅供参考,请学生不要照样抄袭!!

    基于酒店业务的SAP财务凭证模型表设计SQL表结构.rar

    此设计表结构是基于SAP的财务系统设计模型,其他业务财务系统请参考! 设计模型包括以下:业务模型表(hotel_business_model)、商品科目映射表(hotel_goods_info)、记账单位映射表(sap_customer_map【应收】)、...

    用户登录系统数据库表设计.pdf

    下⾯着重介绍⼀下涉及到第三⽅登录中需要注意的问题 在⼀个新项⽬中, 如果是要建⽴⾃⼰的登录体系的话, 那么直接创建⼀个Users表,包含username和password两列,这样,就可以实现登录了: id " username " ...

Global site tag (gtag.js) - Google Analytics