sql - 这种订单情况应该如何设置数据库表

标签 sql ruby-on-rails database database-design database-schema

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

我有一个订单 表。每个 order 都有很多证据。但是,有两种不同的证明:电子证明和实物证明。此外,如果是电子证明,我需要存储图像来源,如果是实物证明,我需要存储跟踪号。

每个证明都有许多与之相关的评论。

如果我可以只有一个proofs 表和一个comments 表就好了,但是跟踪图像源和跟踪的最佳方法是什么?基于证明类型的数字?

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

另一种选择是使用单个proofs 表,在这种情况下我可以使用单个comments 表。但是,正如我所见,这需要三个支持表,proof_typesimage_sourcestracking_numbers

关于解决此问题的最佳方法或更好方法的任何想法?

最佳答案

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

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

订单

  • 订单号(PK)
  • 客户 ID (FK)
  • 等等...

订单详情

  • OrderDetailsID (PK)
  • 订单号(FK)
  • 产品编号? (FK)
  • 等等...

证据

  • ProofID(PK)
  • OrderDetailsID (FK)
  • 证明类型
  • ImagePath(只是路径,不是图片)
  • 追踪号码
  • 等等...

评论

  • 评论 ID (PK)
  • ProofID (FK)
  • 评论
  • 等等...

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

希望对您有所帮助!祝你好运!

关于sql - 这种订单情况应该如何设置数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591651/

相关文章:

mysql - NULL值不会插入到sql表中

sql - 使用 SQL 规范化组内的值

database - 将数据集上传到 Hub 时停止运行时会导致什么情况?

database - 单元测试 SQL 脚本

mysql - 表已存在sql

ruby-on-rails - Rspec, cucumber : best speed database clean strategy

ruby-on-rails - Rails 3. 如何获得两个数组之间的差异?

ruby-on-rails - RVM 安装 Ruby 失败

sql - 使用 where 进行 select 语句时,HSQLDB 用户缺少权限或找不到对象错误

sql - 返回列与计数前 2 列匹配的所有行