Sql server 避免表格重复

Sql server 避免表格重复,sql-server,tsql,database-design,schema,Sql Server,Tsql,Database Design,Schema,我有一个表,其中包含关于任务的数据,如Id、名称、日期、WorkerId、VehicleId(以及50多个字段) 我想建立订单模块,它将允许用户以订单的形式插入任务。 订单包含来自task的子集字段,例如WorkerId和VehicleId only(正如我所说,tasks表中有50多个字段)。 由于每个用户都可以选择组成订单的字段定义,因此我必须复制tasks表并将其命名为orders表。 由于tasks表的大小(字段方面)很大,我希望避免重复它。是否有任何可能的方法来存储订单数据,而不包括创

我有一个表,其中包含关于任务的数据,如Id、名称、日期、WorkerId、VehicleId(以及50多个字段)

我想建立订单模块,它将允许用户以订单的形式插入任务。 订单包含来自task的子集字段,例如WorkerId和VehicleId only(正如我所说,tasks表中有50多个字段)。 由于每个用户都可以选择组成订单的字段定义,因此我必须复制tasks表并将其命名为orders表。 由于tasks表的大小(字段方面)很大,我希望避免重复它。是否有任何可能的方法来存储订单数据,而不包括创建类似于任务表的大型表

另外,我不想在任务表中存储订单,因为: 1.可能会有许多订单影响性能。
2.已经有许多任务。

您可以在任务表中添加一个字段
is\u order
,如果是订单,则将其设置为true;如果是任务,则将其设置为false


您可能还希望重命名表,以显示它可以包含订单或任务。

您可以在任务表中添加一个字段
is\u order
,如果是订单,则将其设置为true;如果是任务,则将其设置为false


您可能还希望重命名表,以显示它可以包含订单或任务。

很难从您的描述中确定,但听起来您希望将表“任务”中的列视为订单的行项目

ord_num  line_item    task_attribute    attribute_value
--
15       1            WorkerId          35
15       2            VehicleId         101-345-2A3574
话虽如此,我还是不得不这么说

  • 对我来说,让用户 订购任务,但
  • 对我来说,让别人去做是没有意义的 用户从列表中订购一列或两列 任务表

特别是从任务表中只订购一个或两个id号——WTF是否意味着,无论如何?

很难从您的描述中确定,但听起来您希望将表“任务”中的列视为订单的行项目

ord_num  line_item    task_attribute    attribute_value
--
15       1            WorkerId          35
15       2            VehicleId         101-345-2A3574
话虽如此,我还是不得不这么说

  • 对我来说,让用户 订购任务,但
  • 对我来说,让别人去做是没有意义的 用户从列表中订购一列或两列 任务表

特别是从一个任务表中订购一个或两个id号——不管怎样,WTF是否意味着?

如果我理解正确,您希望创建一个新表,但不希望它有50多个列。是这样吗


您可以执行类似于
Orders(ID,Configuration)
的操作,其中Configuration是所有可选数据的字符串表示形式。或者您可以执行类似于
订单(ID,FieldID,FieldValue)
的操作。在本例中,如果一个订单有三个可选字段,它将在表中显示为3个不同的行。当您想要查询它们时,这两种方法都会带来挑战。我想我会咬紧牙关,只需要50个列的表。

如果我理解正确,您希望创建一个新表,但不希望它有50多个列。是这样吗


您可以执行类似于
Orders(ID,Configuration)
的操作,其中Configuration是所有可选数据的字符串表示形式。或者您可以执行类似于
订单(ID,FieldID,FieldValue)
的操作。在本例中,如果一个订单有三个可选字段,它将在表中显示为3个不同的行。当您想要查询它们时,这两种方法都会带来挑战。我想我会咬紧牙关,只需要50列表格。

如果任务中有50个字段,那么该表格是非标准化的。如果它是一个“非常重复的系统”,数据库就不会正常化。正如您所知道的,非规范化的表很难扩展,它们对函数扩展有严格的限制


在添加顺序并将它们与任务或任务组件关联,从而使复制复杂化之前,您需要首先使任务正常化。这将导致多个任务相关的标准化表格(人员、车辆、工人),然后添加订单并将订单关联到这些表格将变得简单。

如果任务中有50个字段,则该表格是非标准化的。如果它是一个“非常重复的系统”,数据库就不会正常化。正如您所知道的,非规范化的表很难扩展,它们对函数扩展有严格的限制


在添加顺序并将它们与任务或任务组件关联,从而使复制复杂化之前,您需要首先使任务正常化。这将产生多个与任务相关的标准化表格(人员、车辆、工人),然后添加订单并将订单关联到这些表格将变得非常简单。

我更新了我的问题-我不想将任务和订单合并。我有很多理由不这样做,我可以写很多故事并浪费很多时间。我不想合并表格-请尝试帮助我解决我的限制。我更新了我的问题-我不想合并任务和订单。我有很多理由不这样做,我可以写很多故事,浪费很多时间。我不想合并表-请尝试帮助我解决我的限制。这是一个非常重复的系统,有很多连接,我试图让事情变得非常简单,所以听起来似乎不符合逻辑。但请相信我——确实如此。您的解决方案的问题是我不能使用外键,我认为这是一个巨大的缺点。@Naor:如果您必须为“tasks”表设置外键,您不能让用户选择列,是吗?外键必须引用主键或具有唯一约束的一列或一组列。这是一个非常重复的系统,有许多连接,我试图使事情变得非常简单,因此听起来似乎不符合逻辑。但请相信我——确实如此。您的解决方案的问题是我不能使用外键,我认为这是一个巨大的缺点。@Naor:如果您必须为“tasks”表设置外键,您不能让用户选择列,是吗?外键必须引用主键,或者引用