Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我应该如何为这种订单情况设置数据库表_Sql_Ruby On Rails_Database_Database Design_Database Schema - Fatal编程技术网

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

Sql 我应该如何为这种订单情况设置数据库表,sql,ruby-on-rails,database,database-design,database-schema,Sql,Ruby On Rails,Database,Database Design,Database Schema,我正在为一家印刷公司构建一个web应用程序,并试图为我的数据库确定最佳设计 我有一张订单表格。每个订单都有许多证明。然而,有两种不同的证明:电子证明和实物证明。此外,如果是电子校样,我需要存储图像源,如果是物理校样,我需要存储跟踪号 每个证据都有许多与之相关的注释 如果我能有一张样张表和一张评论表就好了,但是根据样张类型跟踪图像源和跟踪编号的最佳方法是什么 我曾考虑过为电子校对和实物校对创建单独的表格,但这需要制作单独的电子校对注释表格和实物校对注释表格 另一个选择是有一个校对表,在这种情况下,

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

我有一张
订单
表格。每个
订单
都有许多证明。然而,有两种不同的证明:电子证明和实物证明。此外,如果是电子校样,我需要存储图像源,如果是物理校样,我需要存储跟踪号

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

如果我能有一张
样张
表和一张
评论
表就好了,但是根据样张类型跟踪图像源和跟踪编号的最佳方法是什么

我曾考虑过为
电子校对
实物校对
创建单独的表格,但这需要制作单独的
电子校对注释
表格和
实物校对注释
表格

另一个选择是有一个
校对
表,在这种情况下,我可以有一个
注释
表。然而,在我看来,这需要三个支持表,
证明类型
图像源
,以及
跟踪编号


关于解决这个问题的最佳方法或者更好的方法有什么想法吗?

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

这类似于某些项目可能有大小,但有些项目没有大小的情况—您只是不填充与特定类型的项目无关的属性

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

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

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

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

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

这类似于某些项目可能有大小,但有些项目没有大小的情况—您只是不填充与特定类型的项目无关的属性

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

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

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

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

正如在另一个答案中提到的,你只需要一个表,只需根据类型将其中一个字段留空即可。然而,我的答案的不同之处在于将订单细节与证明相关联,而不是将证明与订单细节(或示例中的订单项目)相关联。这样做可以让你有多个证明每个订单的细节

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

命令

  • 医嘱ID(PK)
  • 客户ID(FK)
  • 等等
订单详情

  • OrderDetailsID(主键)
  • 医嘱ID(FK)
  • 产品ID?(FK)
  • 等等
证明

  • 证明ID(PK)
  • OrderDetailsID(FK)
  • 校样
  • ImagePath(只是路径,而不是图像)
  • 追踪号码
  • 等等
评论

  • 注释ID(主键)
  • 证明ID(FK)
  • 评论
  • 等等
将ProofType分解到它自己的表中可能也是明智的,但是在没有ProofType的情况下也可以工作。如果要这样做,您需要创建一个校对类型表,并将“校对”表中的“校对类型”字段更改为一个外键,该外键引用新“校对类型”表中的“校对类型ID”字段


希望这有帮助!祝你好运

如另一个答案所述,您只需要一个表,只需根据类型将其中一个字段留空即可。然而,我的答案的不同之处在于将订单细节与证明相关联,而不是将证明与订单细节(或示例中的订单项目)相关联。这样做可以让你有多个证明每个订单的细节

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

命令

  • 医嘱ID(PK)
  • 客户ID(FK)
  • 等等
订单详情

  • OrderDetailsID(主键)
  • 医嘱ID(FK)
  • 产品ID?(FK)
  • 等等
证明

  • 证明ID(PK)
  • OrderDetailsID(FK)
  • 校样
  • ImagePath(只是路径,而不是图像)
  • 追踪号码
  • 等等
评论

  • 注释ID(主键)
  • 证明ID(FK)
  • 评论
  • 等等
将ProofType分解到它自己的表中可能也是明智的,但是在没有ProofType的情况下也可以工作。如果要这样做,您需要创建一个校对类型表,并将“校对”表中的“校对类型”字段更改为一个外键,该外键引用新“校对类型”表中的“校对类型ID”字段

希望这有帮助!祝你好运

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

其他注意事项:证明类型之间的比率是多少?怎么样