避免重复表格

时间:2011-03-12 18:25:55

标签: sql-server tsql database-design schema

我的表格包含有关Id,Name,Date,WorkerId,VehicleId(以及更多50个字段)等任务的数据。

我想构建订单模块,以便用户将任务作为订单插入。 订单包含来自任务的子集字段,例如WorkerId和VehicleId(正如我所说 - 任务表中有超过50个字段)。 由于每个用户都可以选择组成订单的字段定义 - 我必须复制任务表并将其命名为订单表。 因为任务表的大小(在字段方面),我想避免重复它。是否有任何可能的方法来存储不包括创建巨大的表,如任务表的订单数据?

P.S。我不想将订单存储在任务表中,因为: 1.会有很多订单可能影响绩效。 2.已经有很多任务。

4 个答案:

答案 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

尽管如此,我不得不说

  • 让用户真的有意义 订购任务,但
  • 对我来说没有意义 用户从a订购一列或两列 任务表。

特别是要从一个任务表中订购一个或两个身份证号码 - 无论如何,WTF会意味着吗?