2010-10-12 141 views
1

这不是一项家庭作业,而是由上级分配的新任务。为内部最终用户创建一个系统,根据每条生产线的生产能力自动向不同的生产线建议。用户需要每个月保持每条生产线的生产能力,每条生产线上都有自己的产品组,每条生产线上都有独特的优势。当销售订单到来时,系统将根据下面的生产线计划维护,根据重要性设置对每条生产线进行自动分配。关于数据库设计技巧的问题


例如,产品组XYZ下的产品A将在L1和L2上运行。
样本数据
期间| Line_Number | Product_Subgp | Line_Capacity | Prority
201009 | L1 | XYZ | 2000 | 1
201009 | L1 | ABC | 2000 | 2
201009 | L2 | XYZ | 2000 | 2
201009 | L2 | ZZZ | 2000 | 1


的行标题表结构:LinHdr

Line_Hdr_ID | Int(自动增量)
Line_Number | VarChar(10)[主键]
期间| VarChar(6)[主键]
容量|数字(16)
Special_Capacity |数字(16)
Line_Description |对于行标题VARCHAR(20)


表结构:LinDtl

Line_Dtl_ID | Int(自动增量)
Line_Hdr_ID | Int [主键]
Product_Group | VarChar(10)[主键]
Prority |数字(2)


问题:

  1. 表LinHdr:LINE_NUMBER +周期是主键。由于这两个字段将作为唯一性和数据的一个查找键。我是否正确设置为主键?

  2. 表LinHdr:是否需要将Lin_Hdr_ID作为主键? (LinHID是通过SQL自动增加的,对用户是不可见的)。

    • LinHID的目的是链接到LinDtl,这样就没有必要包括冗余数据(即周期+ LINE_NUMBER)成LinDtl,通过使用Lin_Hdr_ID链接betw 2表。
  3. 表LinDtl:Line_Hdr_ID + Product_Group将设置为主键,以实施唯一性。 这是否正确有此Line_Dtl_ID? 这个字段是必需的吗? 如果Line_Hdr_ID + Product_Group已经提供唯一性,可以排除Line_Dtl_ID?

  4. 或者,最好将上面的两个表合并到一个表中,而不是创建关系数据库?

希望能从这里获得专业意见。

在此先感谢。

+1

设计技巧1.不要缩写表或列。使用整个词。全长单词。详细。请使用非常长,非常清晰,非常精确,非常完整的名称。我们甚至无法开始猜测你在说什么。请**更新**问题以包含详细信息。如果这是家庭作业,请将其标记为家庭作业。 – 2010-10-12 02:14:51

回答

0

1.1。行Hdr ID设置为autinc - 使该PK。你可以在没有PK的领域进行搜索。如果它们在一起是唯一的,那就对它们进行索引 - 需要让它们成为PK,然后必须将它用作FK长键!再加上我个人不喜欢把日期到的PK

  1. 见上面的#1 - 而且,你回答了你自己的问题!

  2. 如果你想在InDtl中创建一个concat/composite PK,那么使它成为LinHdr_id + Lin Dtl Id--这是做一个识别关系的“正确”方式。

  3. 不要组合表格,这将违反第3范式。

  4. COnsider读一本书:实体关系建模Richard Barker。

1

我同意乔所说的(打字并打他)。

我要补充的一件事就是 如果“线描述”这一列对于线本身是独一无二的,而不是每个线/周期组合,那么您希望有一个单独的“线”表中包含LineNum和LineDescription列。这样,当您输入新的期间信息时,您不必每个月都插入该描述值。如果说明每个月都有变化(或者只能在一段时间内更改),那么请保持原样。

+0

谢谢,你的建议很好。但是在这种情况下,带有LineNum和LineDescriptions的独立“Line”表只有2个字段,因为需要更多的努力为用户创建另一个入口程序来维护LineDescription。 :P – 2010-10-12 04:47:03