Database design 数据库设计技巧问题

Database design 数据库设计技巧问题,database-design,relational,Database Design,Relational,这不是作业,而是上级布置的新任务。为内部最终用户创建一个系统,根据每条生产线的产能自动向不同的装配线提出建议。用户需要每个月维护每条生产线的产能,每条生产线都有自己的产品组在其上运行,在每条装配线上具有独特的优势。当销售订单到来时,本系统将根据下面的生产线计划维护,根据优先级设置自动分配到各装配线 例如,产品组XYZ下的产品A将在L1和L2运行。 样本数据 期间|线号|产品|子总成|线容量|优先级 201009 | L1 | XYZ | 2000 | 1 201009 | L1 | ABC |

这不是作业,而是上级布置的新任务。为内部最终用户创建一个系统,根据每条生产线的产能自动向不同的装配线提出建议。用户需要每个月维护每条生产线的产能,每条生产线都有自己的产品组在其上运行,在每条装配线上具有独特的优势。当销售订单到来时,本系统将根据下面的生产线计划维护,根据优先级设置自动分配到各装配线


例如,产品组XYZ下的产品A将在L1和L2运行。
样本数据
期间|线号|产品|子总成|线容量|优先级
201009 | L1 | XYZ | 2000 | 1
201009 | L1 | ABC | 2000 | 2
201009 | L2 | XYZ | 2000 | 2
201009 | L2 | ZZZ | 2000 | 1


行标题的表结构:LinHdr

行Hdr\u ID|Int(自动增量)
行号| VarChar(10)[主键]
句号| VarChar(6)[主键]
容量|数字(16)
特殊容量|数字(16)
行描述| VarChar(20)


行标题的表结构:LinDtl

行(自动增量)
行Hdr\u ID|Int[主键]
Product|u Group|VarChar(10)[主键]
优先级|数字(2)


问题:

  • 表LinHdr:行号+句点是主键。因为这两个字段将作为数据的唯一性和seekkey。将两者都设置为主键是否正确

  • 表LinHdr:是否需要将Lin_Hdr_ID包含为主键? (由SQL自动递增的LinHID对用户不可见)

    • LinHID的目的是通过使用Lin_Hdr_ID链接两个表,链接到LinDtl,从而无需在LinDtl中包含冗余数据(即周期+行号)
  • 表LinDtl:Line_Hdr_ID+Product_组将设置为主键,以强制唯一性。 使用此行\u Dtl\u ID正确吗? 这个字段有必要吗? 如果Line\u Hdr\u ID+Product\u Group已提供唯一性,是否可以排除Line\u Dtl\u ID

  • 或者,最好将上面的2个表合并成1个表,这并没有创建关系数据库

  • 希望能从这里得到专家的建议


    提前谢谢

    1.1。行Hdr Id设置为autinc-使其成为PK。您可以搜索没有PK的字段。如果它们在一起是唯一的,那么对它们进行索引-需要使它们PK,然后将其用作FK长键!另外,我个人不喜欢在PKs中输入日期

  • 见上文第1条——你回答了自己的问题

  • 如果您希望在InDtl中使用concat/composite PK,那么将其设置为LinHdr_id+Lin Dtl id-这是处理标识关系的“正确”方法

  • 不要合并表格,这将违反第三范式

  • 考虑阅读Richard Barker的一本书:实体关系建模


  • 1.1。行Hdr Id设置为autinc-使其成为PK。您可以搜索没有PK的字段。如果它们在一起是唯一的,那么对它们进行索引-需要使它们PK,然后将其用作FK长键!另外,我个人不喜欢在PKs中输入日期

  • 见上文第1条——你回答了自己的问题

  • 如果您希望在InDtl中使用concat/composite PK,那么将其设置为LinHdr_id+Lin Dtl id-这是处理标识关系的“正确”方法

  • 不要合并表格,这将违反第三范式

  • 考虑阅读Richard Barker的一本书:实体关系建模


  • 我同意乔所说的(当时他正在打字,他比我快)

    我想补充一点,那就是
    如果列“Line Description”是行本身特有的,而不是每个行/期间组合特有的,则需要一个单独的“Line”表,其中包含LineNum和LineDescription列。这样,您就不必在每月输入新的期间信息时插入该描述值。如果描述每个月都会改变(或者它可能只在一段时间内改变),那么就保持原样。

    我同意乔说的话(当时他正在打字,他比我快)

    我想补充一点,那就是
    如果列“Line Description”是行本身特有的,而不是每个行/期间组合特有的,则需要一个单独的“Line”表,其中包含LineNum和LineDescription列。这样,您就不必在每月输入新的期间信息时插入该描述值。如果描述每个月都会更改(或者可能只在一段时间内更改),则保持原样。

    设计提示1。不要缩写表格或列。使用完整的单词。全长单词。详细地请使用非常长、非常清晰、非常精确、非常完整的名称。我们甚至猜不出你在说什么。请更新问题以包含详细信息。如果这也是家庭作业,请将其标记为家庭作业。设计提示1。不要缩写表格或列。使用完整的单词。全长单词。详细地请使用非常长、非常清晰、非常精确、非常完整的名称。我们甚至猜不出你在说什么。请更新问题以包含详细信息。如果这是家庭作业,也请将其标记为家庭作业。谢谢,你的建议很好。但在这种情况下,带有LineNum和LineDescriptions的单独“Line”表只有2个字段,因为需要更多的工作来为用户创建另一个条目程序来维护LineDescriptions:汉克斯,你的建议很好。但在这种情况下,separa