Mysql 如何正确拆分大型sql表

Mysql 如何正确拆分大型sql表,mysql,sql,database,Mysql,Sql,Database,我正在尝试设计一个数据库,它必须处理5种不同类型的订单,我将有一个大订单表,每个类型或订单都有字段,但它太大了 我想到的方法如下,每个订单都有一个唯一的id,下单人的id和订单类型表的id,订单详细信息将存储在该表中 订单 id 用户id(user.id的外键) 订单日期 订单类型2\u id(订单类型1.id的外键) 订单类型3\u id(订单类型2.id的外键) 订单类型4\u id(订单类型3.id的外键) 订单类型5\u\u id(订单类型4.id的外键) 订单类型6\u id(订单类型

我正在尝试设计一个数据库,它必须处理5种不同类型的订单,我将有一个大订单表,每个类型或订单都有字段,但它太大了

我想到的方法如下,每个订单都有一个唯一的id,下单人的id和订单类型表的id,订单详细信息将存储在该表中

订单
id
用户id(user.id的外键)
订单日期
订单类型2\u id(订单类型1.id的外键)
订单类型3\u id(订单类型2.id的外键)
订单类型4\u id(订单类型3.id的外键)
订单类型5\u\u id(订单类型4.id的外键)
订单类型6\u id(订单类型5.id的外键)

订单类型1
id

订单类型2
id

订单类型3
id

订单类型4
id

订单类型5
id


最好只将所有数据存储在一个大表中,并将未使用的字段设为空,或者通过使用单独的表并以某种方式连接它们,使我走上正确的轨道。如果方向正确,那就太好了,因为我觉得我的解决方案是不正确的。

如果只有一个表,通常只转换为业务层中的一个对象,可能更简单。如果出于某种原因,您需要在某个点拉入所有订单,则不需要联接。如果空字段是可变的,则它们不会占用太多空间,但是固定字段会占用与其宽度相同的空间

这是数据库设计和规范化的问题

您需要回答基本的数据库设计问题,如:

  • 数据库中不同订单类型的用途是什么
  • 不同的订单类型包含哪些数据
  • 每种订单类型的数据是否存在结构性差异
  • 如何使用订单类型中的数据
  • 订单类型是每个订单的必填字段吗
顺便说一句,我想说的是,您正在追求一个关于终端数据库中需要什么的过于复杂的概念

考虑一下。。。 如果5种订单类型的数据结构相同,则实际上只需要一个订单类型字段

order\u表
id(主键BIGINT(10)无符号非空自动增量,)
user_id(user.id BIGINT(10)的外键未签名非空)
订单日期(日期时间不为空默认为“0000-00-00:00:00”)
order\U type\U id(order.type TINYINT的外键(1)无符号非空)

通过应用程序代码处理连接

  • 如果订单类型为0,请使用查找订单ID连接订单表0
  • 如果订单类型为1,则使用查找订单ID对订单表1进行联接
  • 如果订单类型为2,则使用查找订单ID对订单表2进行联接
  • 如果订单类型为3,则使用查找订单ID对订单表3进行联接
  • 如果订单类型为4,则使用查找订单ID对订单表4进行联接

但这里的关键是您没有提供足够的信息来正确评估数据库设计以及如何将规范应用到表中,以处理当前订单表超过主机的MySQL限制的问题(可能考虑不同的主机或VPS托管选项)。


附加阅读

每当你写“表1”、“表2”或“专栏1”、“专栏2”时,你可能走错了方向。如果每个订单只不过是一个ID,那么它听起来就像订单类型的枚举字段的作业。这些订单的区别是什么?您还将与每个订单关联哪些字段?哪些字段只适用于特定类型的订单?这些名称只是为了回答这个问题,每个表大约有20-50列是订单所特有的。有5种不同类型的订单,如果我必须有一个名为order的表,并且每个订单类型的列都在其中,那么一个表中将有近200列。我有一个巨大的表,其中有一列名为order type,并将其全部存储起来,但我认为最好将每个订单类型分为一个子表,以便于使用。提供一些关于每个订单类型的独特信息以及共同点的想法,将有助于我们回答这个问题。还有每个订单类型所代表的内容。有5个订单类型,最多50列,每个订单都是唯一的,我有一个大表,其中存储了所有订单类型和id列。我认为,通过为每种订单类型创建一个子表,可以更轻松地使用每种订单唯一的0.50列或每种订单类型唯一的50列?在数据库设计中,这是两件截然不同的事情。