首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何为这种订单情况设置数据库表

我应该如何为这种订单情况设置数据库表
EN

Stack Overflow用户
提问于 2012-03-07 04:48:39
回答 3查看 245关注 0票数 1

我正在为一家印刷公司构建一个web应用程序,并试图确定我的数据库的最佳设计。

我有一张orders桌子。每个order都有很多证据。然而,有两种不同的证明:电子证明和物理证明。此外,如果它是电子证明,我需要存储图像来源,如果它是物理证明,我需要存储跟踪编号。

每个证明都有许多与之相关的注释。

如果我只有一个proofs表和一个comments表就好了,但是根据校样类型跟踪图像源和跟踪号的最佳方法是什么?

我曾考虑为electronic_proofsphysical_proofs创建单独的表,但这需要创建一个单独的electronic_proof_comments表和physical_proof_comments表。

另一种选择是只有一个proofs表,在这种情况下,我可以有一个comments表。但是,在我看来,这将需要三个支持表:proof_typesimage_sourcestracking_numbers

有没有关于解决这个问题的最好方法或者更好的方法的想法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-07 07:55:49

正如在另一个答案中提到的,您只需要一个表,并根据类型将其中一个字段保留为空。然而,我的答案的不同之处在于将订单详细信息与证明相关联,而不是将证明与订单详细信息(或其示例中的订单项)相关联。通过这种方式,您可以为每个订单详细信息提供多个证明。

如果我是你,我会这样设置:

订单

(PK)

  • CustomerID (FK)

  • Etc...

  • OrderID

订单列表

  • OrderDetailsID (PK)
  • OrderID (FK)
  • ProductID?(FK)
  • Etc...

证明

  • ProofID path (仅路径,而不是image)
  • TrackingNumber
  • Etc...

评论

  • CommentID (PK)
  • ProofID (FK)
  • Comment
  • Etc...

将ProofType分解到它自己的表中也可能是明智的,但也可以在没有表的情况下工作。如果要这样做,您需要创建一个ProofType表,并将"Proofs“表中的"ProofType”字段更改为引用新"ProofType“表中的"ProofTypeID”字段的外键。

希望这能有所帮助!祝好运!

票数 4
EN

Stack Overflow用户

发布于 2012-03-08 07:39:25

我同意@Ricketts (+1)。棘手的部分是在校验表中包含列ImagePathTrackingNumber,还是将它们规范化到单独的表中。(规范化,因为它们不依赖于主键,它们依赖于主键+证明类型列。)如果这是仅有的两列特定于证明类型的列,那么您可能可以将它们存储在单个表中……但是这个ImagePath让我很紧张,特别是如果它不是一个图像而是一个实际的二进制数据块。出于多种原因,将数据单独存储在它自己的表中,而不是将TrackingNumber移出,这可能是有意义的。

其他注意事项:证明类型之间的比率是多少?性能是如何工作的(特别是当您的数据请求中涉及BLOB时?)在做出最终决定之前,您必须权衡并可能测试这些考虑因素。

票数 1
EN

Stack Overflow用户

发布于 2012-03-07 05:51:37

我希望证明类型只是物品的一个属性,跟踪号和图像来源也是,对吗?

这类似于某些项目可能有大小,但有些没有-您只是不填充对于特定类型的项目无关紧要的属性。

另外,请注意,对于两个不同的“证明”表,您的订单行项目表现在必须处理两个不同的实体。

像这样的东西对于基本的使用应该是可行的。

代码语言:javascript
复制
ORDERS
 Order ID (PK)

ORDER ITEM
 Order Item ID (PK)
 Order ID (FK)
 Proof ID (FK)

PROOF
 Proof ID (PK)
 Proof Name
 Proof Type
 Tracking Number
 Image Source

COMMENTS
 Comment ID (PK)
 Proof ID (FK)
 Comment Text

如有必要,您可以为校样类型、跟踪编号和图像源创建查找表。这真的取决于你想在多大程度上将现实与关系理论相匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9591651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档