`

理解mysql_如何优雅的设计表结构

 
阅读更多
  数据存储的重要性大家都知道,在此就没必要去强调了。  那么如何将软件运行的这些数据有效合理的存储起来呢? 在设计时可以参考如下几点:
   1、表结构的设计优先考虑遵循3范式
         为什么要遵循第3范式?
         遵循第3范式的设计可以使数据存储简洁、清晰、数据不会有冗余的情况。

         3范式的基本原则:
      a.  字段必须不可再分割
      b.  所有字段必须完全依赖于主键, 绝对不允许依赖于部分主键,尤其是在出现双主键的情况下
      c.  不允许出现传递依赖的情况

           下面举2个不满足范式的示例:
              订单明细表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。 一个订单中可以订购多种产品,所以单单一个 OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF

             订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName, CustomerAddr,CustomerCity)主键是(OrderID),  CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。

    2、有时候也可以适当的反范式设计
    3、单库单表情况下的主键设计使用big int 自增型数据类型
          无序主键会导致索引页频繁分裂,影响性能。
          主键数据类型过大,会影响查询性能和内存、带宽、IO资源。
    4、分库分表情况下的主键设计要合理
          详细方案可以参见《我对分库分表的认识》
    5、字段类型及字段大小的设计要合理
        主要还是从磁盘存储、网络带宽、节省内存空间、减少磁盘IO几方面来考量。
    6、建议每个表都维护create_id、create_time、update_id、update_time额外字段
         从数据安全性方面来讲方便问题追踪;  当高并发操作的情况下,采用乐观锁机制可以提高并发性能。
分享到:
评论

相关推荐

    mysql_markdown_mac.zip

    - **表结构设计文档**: 描述数据库中各个表的字段、类型、键关系等信息的文档,有助于团队理解数据库设计。 - **Go语言**: Google开发的静态类型、编译型语言,常用于构建高性能网络和系统工具。 - **GPG/PGP**: ...

    Mysql.rar_C MYSQL_C++ 访问 mysql_c# mysql_c++ mysql_mysql c++

    `MysqlTableAttr.h`可能包含了对数据库表结构的描述。在这个头文件中,开发人员可能会定义表示数据库表字段的结构体或类,这有助于在程序中处理数据时保持类型安全。结构体或类的成员可以对应于数据库表的列名,而...

    navicat120_mysql_cs_x64.exe.zip

    它的数据设计界面允许用户以图形化方式定义表结构,使数据库设计变得更加直观。 其次,Navicat120支持多窗口和多连接,用户可以同时管理多个数据库,方便在不同的项目之间切换。此外,其“数据同步”功能可以帮助...

    navicat8lite_mysql_cs

    用户可以通过直观的图形化界面,进行表的设计、数据的增删改查、索引的建立与修改,以及触发器和存储过程的管理,无需深入理解复杂的SQL语法,极大地降低了使用门槛。 其次,解决数据乱码问题一直是数据库管理中的...

    MySQL_5.1_zh.chm & MySQL_5.5_en.chm文档

    通过阅读这两份文档,无论是初学者还是经验丰富的开发者,都能深入理解MySQL的功能和用法,提升数据库管理技能。无论选择中文还是英文文档,关键在于不断实践和探索,将理论知识转化为实际操作能力。

    Navicat100_mysql_en

    2. 数据库设计:该软件允许用户创建、编辑和管理数据库结构,包括表、视图、触发器、存储过程等,通过可视化工具简化了数据库设计过程。 3. 数据同步:Navicat提供了强大的数据比较和同步功能,可以分析数据库之间...

    Navicat_for_MySQL_10.1.7

    同时,Navicat 还提供了数据模型设计功能,支持ER图的绘制,帮助用户更好地理解和设计数据库结构。 除此之外,Navicat for MySQL 10.1.7 版本还支持数据导入和导出,可以将数据导出为各种格式,如CSV、Excel、XML等...

    navicat8lite_mysql_cs 数据库连接工具 中文

    2. **数据可视化**:工具提供直观的数据库设计和建模功能,通过图表形式展示数据库结构,帮助用户理解和调整表间关系。用户可以通过ER图(实体关系图)清晰地查看数据库的架构,进行表的设计和优化。 3. **数据操作...

    Devart_dbForge_Studio_for_MySQL_Enterprise v7.4

    Devart_dbForge_Studio_for_MySQL_Enterprise_v7.4是一款专为MySQL数据库开发者设计的强大集成开发环境(IDE)。这个版本7.4是经过验证的,具备了存储过程调试的强大功能,使得数据库管理和开发更加高效和精确。 1....

    navicat8lite_mysql_cs.rar

    通过拖放操作,用户可以直观地创建、修改和设计表结构,无需编写复杂的SQL语句。同时,它还提供了数据查看器和编辑器,使得数据浏览和修改变得异常简单。不仅如此,Navicat8Lite还支持数据库图表的创建,帮助用户更...

    navicat112_mysql_cs_x64.tar.gz

    4. **对象设计**:提供数据库对象(如表、视图、存储过程等)的创建、修改和删除功能,用户可以通过直观的界面进行设计和管理。 5. **同步工具**:用于比较和同步不同数据库之间的结构或数据,确保数据库的一致性。...

    MYSQL软件navicat8lite_mysql_cs

    1. 数据库设计:创建、修改和查看数据库结构,包括表、视图、存储过程等。 2. 数据操作:添加、修改和删除记录,支持批处理操作。 3. SQL编辑器:提供智能提示、语法高亮和代码折叠,帮助编写和执行SQL语句。 4. ...

    MySQL_teach_cn.rar_MYSQL_PHP 教程_TEACH_mysql 教程_mysql教程

    本教程“MYSQL_PHP 教程_TEACH_mysql 教程_mysql教程”旨在帮助初学者和有一定基础的开发者深入理解MySQL,并掌握与PHP的交互技巧。 一、MySQL基础知识 MySQL是一个开源、免费的数据库系统,它使用SQL(结构化查询...

    MySQL_WorkBench管理操作MySQL教程_busyrts_MYSQL_MySQL_WorkBench_

    2. **DDL生成**:完成设计后,MySQL WorkBench可以自动生成创建表、索引、外键等的SQL语句,可以直接在数据库中执行。 四、SQL开发 1. **SQL编辑器**:在“SQL脚本”窗口,你可以编写、运行SQL语句,查询、插入、...

    navicat121_mysql_cs_x64.zip

    - **模型设计**:Navicat的ER(实体关系)图功能可以帮助用户设计和理解复杂的数据库结构。 - **数据同步**:比较并同步不同数据库之间的结构和数据,确保数据一致性。 - **数据备份**:计划定期备份任务,确保...

    createtable.zip_CREATE TABLE_MYSQL_cvi mysql_mysql c_mysql creat

    使用这些资料,可以深入学习MySQL的表结构设计、数据类型选择以及约束条件的使用,从而更好地管理和操作数据库。 总之,创建MySQL表是数据库设计的基础步骤,理解并熟练掌握CREATE TABLE语句及其相关的约束条件对于...

    mysql导出到word格式表结构工具

    这个“mysql导出到word格式表结构工具”提供了一个便捷的解决方案,使得开发者和非技术用户能够清晰地查看和理解数据库架构。 MySQL是一种流行的开源关系型数据库管理系统,它支持SQL语言,提供了强大的数据存储和...

    mysql_gui_tools_5.0

    `restore_structure_example_database.sql`可能包含了创建示例数据库结构的SQL命令,用于重建数据库的表结构。而`restore_rows_example_database.sql`可能包含插入示例数据的SQL语句,用于恢复或填充数据库中的记录...

Global site tag (gtag.js) - Google Analytics