我的表格包含有关Id,Name,Date,WorkerId,VehicleId(以及更多50个字段)等任务的数据。
我想构建订单模块,以便用户将任务作为订单插入。 订单包含来自任务的子集字段,例如WorkerId和VehicleId(正如我所说 - 任务表中有超过50个字段)。 由于每个用户都可以选择组成订单的字段定义 - 我必须复制任务表并将其命名为订单表。 因为任务表的大小(在字段方面),我想避免重复它。是否有任何可能的方法来存储不包括创建巨大的表,如任务表的订单数据?
P.S。我不想将订单存储在任务表中,因为: 1.会有很多订单可能影响绩效。 2.已经有很多任务。
答案 0 :(得分:1)
您可以在任务表中添加字段is_order
,如果是订单则将其设置为true,如果是任务,则设置为false。
您可能还想重命名您的表格,以表明它可以包含订单或任务。
答案 1 :(得分:1)
如果我理解正确,你想创建一个新表,但你不希望它有50多列。是吗?
您可以执行Orders(ID, Configuration)
之类的操作,其中Configuration是所有可选数据的字符串表示形式。或者你可以做Orders(ID, FieldID, FieldValue)
之类的事情。在这种情况下,如果订单有三个可选字段,它将在表中显示为3个不同的行。当您想要查询它们时,这两种方法都会带来挑战。我想我会咬紧牙关,只有50列表。
答案 2 :(得分:1)
如果Task中有50个字段,则该表未规范化。如果它是“非常复制的系统”,则数据库不是标准化的。您似乎意识到,非规范化表很难扩展,它们对功能扩展有严格的限制。
在添加Order并将它们与Task的任务或组件相关联,从而复制复制之前,您需要首先规范化任务。这将导致几个与任务相关的规范化表(Person,Vehicle,Worker),然后添加Order并将Order与这些表相关联将很简单。
答案 3 :(得分:0)
很难从您的描述中确切地说出来,但听起来您希望将“任务”表中的列视为订单的订单项。
ord_num line_item task_attribute attribute_value
--
15 1 WorkerId 35
15 2 VehicleId 101-345-2A3574
尽管如此,我不得不说
特别是要从一个任务表中订购一个或两个身份证号码 - 无论如何,WTF会意味着吗?