销售订单项目详细信息存储,哪条路走?

时间:2011-09-06 15:23:04

标签: c# mysql entity-framework-4.1 mysql-management

我正在使用以下混合物或技术开发一种库存管理应用程序:MySql,C#,WPF,ADO.Net EntityFramework 4.

我对如何将详细信息存储在数据库中的销售/采购发票上感到困惑。

以前我就是这样...我将详细信息存储在LongText字段中作为XML字符串。

+---------------------------------------------------+
| SalesInvoices                                     |
+---------------------------------------------------+
| int InvoiceID: primary key, auto-incretement      |
| int OrderID                                       |
| int CustomerID                                    |
| int CreatedByEmployeeID                           |
| DateTime Date                                     |
| DateTime? ShippingDate                            |
| LongText ItemsData (details, stored as XML)       |
| LongText TransactionData (details, stored as XML) |
| Double Subtotal                                   |
| Double Tax                                        |
| Double Freight                                    |
| Double FreightTax                                 |
| Double Total                                      |
+---------------------------------------------------+

但是,我浏览了网络,我看到的大多数示例都有一个单独的表SalesInvoiceDetails。所以我想知道,我的方法是否有问题,如果我遇到切换到方法的麻烦。

我的要求:通过SalesInvoice表搜索的速度应该非常快。我不需要搜索发票的详细信息,除非用户实际开了发票,所以如果用户必须在这里等待一两秒钟,这是没关系的。

我第一次选择我的方法的原因是因为我认为一个表中的数百万个细节最终会使打开速度变慢,如果用户决定返回更改,我将不得不担心删除和更新行一些东西。我认为为细节线创建子项并将它们存储为行并跟踪父/子关系等会有点麻烦。

所以,是的,我想知道为什么我应该放弃我的方法,并为细节制作另一张桌子。

1 个答案:

答案 0 :(得分:0)

为什么你认为使用单独的表会很慢?我认为你需要阅读(如果你还没有)关于Database normalizationindexes等等以获得良好的表现。要立即更新详细信息,您需要传输并插入整个blob,而不是例如一个价格字段。

我也找到了很好的文章here。我真的很喜欢作者所写的内容(很好地放弃了你的方法):

  

这不是一个糟糕的方法,因为它记录了每个客户的每次购买。但是,如果你开始提出复杂的问题,例如:

     

2002年Freens R Us订购了多少3个“Red Freens”?

     

德克萨斯州56家Blue Freens的总销售额是多少?

     

2003年7月14日售出的商品是什么?

这是我的意见:)。