【问题标题】:break up of single table into two tables将单个表拆分为两个表
【发布时间】:2020-10-26 06:42:39
【问题描述】:

考虑一个有 50 列的表 dbo.order。将其 30 个字段分解为另一个表 bill_invoice 是否是一种好方法?详情如下:

表(订单)

id(pk);order_id;order_amont;...最多 20 个字段

表格 (bill_invoice)

id(pk); order_id(来自 dbo.order 表的 fk);字段_1; field_2 .... 直到 field_30

....及其详细信息表是:

表格(bill_detail_01)

id(pk); bill_invoice_id(来自 dbo.bill_invoice 的 fk); field_1, field2... 直到 field_10

表格(bill_detail_02)

id(pk); bill_invoice_id(来自 dbo.bill_invoice 的 fk); field_1, field2... 直到 field_10

表格(bill_detail_03)

id(pk); bill_invoice_id(来自 dbo.bill_invoice 的 fk); field_1, field2... 直到 field_10

。 . . .

如果我们有一个表 dbo.[order] 有 50 个字段,那么插入 50 个字段记录会很重吗?

那么我们应该将这个主要的 dbo.[order] 字段拆分到另一个表( bill_invoice )中吗?如上所述?

这是减少插入负载的好方法吗?还是我们应该更喜欢规范化以仅使用具有 50 个字段的 dbo.[order]?

【问题讨论】:

  • Ken Lee 已经回答了我,他明白了我为什么要问这样关于管理数据的问题,我对他的回答很满意“如果您将数据拆分到不同的表中,然后说是否要删除一条记录,你需要删除所有“拆分”表中的所有“链接”记录。工作量会更重。”

标签: sql database datatable database-normalization


【解决方案1】:

我认为现代数据库系统无法处理 50 个数据字段的数据插入/更新操作。

如果您将数据拆分到不同的表中,然后说如果要删除一条记录,则需要删除所有“拆分”表中的所有“链接”记录。工作量会更重。

另一方面,如果有必要,将使用归一化。例如,如果您想减少冗余或类似目的。但这通常与数据插入加载问题无关。

【讨论】:

  • 除非一个订单会有很多多张发票,否则可以将发票的发票数据(如押金金额、尾款金额、备注)与订单数据记录一起存储。但是当然,如​​果一个订单会有“经常性”发票(比如每个订单每个月都会开一张发票),那么您需要将发票数据放入一个单独的表中
猜你喜欢
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 2022-08-09
  • 2011-06-20
  • 2019-01-05
相关资源
最近更新 更多