【问题标题】:Am I losing the 3NF of my table when I populate it with information当我用信息填充表时,我是否丢失了表的 3NF
【发布时间】:2014-04-08 17:10:14
【问题描述】:

创建了 2 个具有关系且在 3NF 中的表。

表员工:

Emp_ID

Emp_First_Name

Emp_Last_Name

Emp_DOB

表格训练:

Training_ID

Train_Desc

Train_Date

Emp_ID (FK)

即使他们现在处于 3NF,当我用信息填充训练表并且 2 人接受相同的训练时,训练表不会失去它的 3NF 吗?例如,数据重复的地方如下。

【问题讨论】:

  • 什么是Training_ID?它是对另一个包含 (1001, 'Running')、(1002, 'Cycling') 等元组的表的引用吗?
  • 您应该在训练表上有主键,但它不应该是训练 ID pk_trainingTr_id,您当前的训练 ID 应该是 fk_training_id 并引用新表 ms_training 的 pk_training_id。如果需要更多详细信息,请告诉我.
  • @Carsten Training_ID 不是对另一个表的引用。它是该表本身的主键。
  • @AK47 你能给我举个例子吗?谢谢。

标签: mysql sql database postgresql


【解决方案1】:

让我解释一下, 首先你应该有一个主表来保存训练细节,

Table ms_training:

pk_training_id int (Primary,identity)
training_date date
training_desc text

然后应该有事务映射表,将 Training with Employee 映射为,

Table tr_training:

pk_trainingTr_id (Primary key,identity)
fk_training_id(FK ref. ms_training)
Emp_ID (FK)

我希望我能正确解释,如果不让我知道。

【讨论】:

  • 我明白你的意思。只是想知道这是否正常。因为如果我最初有 4 个表有关系,那么这个映射的 cos 最终会变成 8 个表。
  • 我建议使用_header 表和_dtl 表,但这会起作用。:)
  • @ChristianMark,你能简单解释一下吗?
  • @AK47,我说的是你的表的命名。取而代之的是,您可以拥有 training_mstr + emp_mstr 然后 training_hdrtraining_dtl.:) training_mstr 保持培训类型(例如跑步,举重),然后 emp_mstr 保持员工。另一方面,training_hdr 维护计划日期和时间,然后链接到维护training_idemp_idtraining_dtl
  • O ,我明白了,所以现在取决于用户要求,如果培训计划是固定的并且不会改变任何员工然后 MyWay,但如果特定培训的计划对于不同的员工是不同的,那么你的方式。感谢 Mate 抽出宝贵时间。
猜你喜欢
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 2023-01-25
相关资源
最近更新 更多