Sql 我应该如何为这种订单情况设置数据库表
我正在为一家印刷公司构建一个web应用程序,并试图为我的数据库确定最佳设计 我有一张Sql 我应该如何为这种订单情况设置数据库表,sql,ruby-on-rails,database,database-design,database-schema,Sql,Ruby On Rails,Database,Database Design,Database Schema,我正在为一家印刷公司构建一个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)
- 评论
- 等等
希望这有帮助!祝你好运 如另一个答案所述,您只需要一个表,只需根据类型将其中一个字段留空即可。然而,我的答案的不同之处在于将订单细节与证明相关联,而不是将证明与订单细节(或示例中的订单项目)相关联。这样做可以让你有多个证明每个订单的细节 如果我是你,我会这样设置: 命令
- 医嘱ID(PK)
- 客户ID(FK)
- 等等
- OrderDetailsID(主键)
- 医嘱ID(FK)
- 产品ID?(FK)
- 等等
- 证明ID(PK)
- OrderDetailsID(FK)
- 校样
- ImagePath(只是路径,而不是图像)
- 追踪号码
- 等等
- 注释ID(主键)
- 证明ID(FK)
- 评论
- 等等
ImagePath
和TrackingNumber
,还是将它们规范化为单独的表。(规范化,因为它们不依赖于主键,它们依赖于主键+证明类型列。)如果这是仅有的两个证明类型特定的列,那么您可能可以将它们存储在单个表中。。。但是这个ImagePath让我很紧张,特别是如果它不是一个图像,而是一个相当大的二进制数据块的话。出于多种原因,将这些数据单独存储在自己的表中可能是有意义的,但也不能将TrackingNumber移出
其他注意事项:证明类型之间的比率是多少?怎么样