【问题标题】:Third Normal Form (3NF)第三范式 (3NF)
【发布时间】:2021-11-21 11:49:50
【问题描述】:

如果我想确保它们在 3NF 中,我有这两张表,这是正确的方法吗?

我也可以知道有下划线但也用星号表示的主键的用途,这背后的原因是什么?

表格

我的答案

第三范式

员工详情(员工ID,SName,DOB,DivisionNo*)

Division(DivisionNo,DivName,DivSupervisorID)

StaffProject(StaffId*, ProjectNo*,SName, ProjectName,HoursAssigned)

项目(项目编号,项目名称)

请假设加粗的属性是下划线。非常感谢。

【问题讨论】:

  • 请在每个帖子中提出 1 个问题。请通过编辑而不是 cmets 进行澄清。请use text, not images/links, for text--including tables & ERDs。转述或引用其他文本。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。在图片中包含图例/键和说明。
  • Re“这是对的”:根据您的参考/教科书显示您的工作步骤,并说明理由 - 并非所有术语/符号都是标准的,我们不确切知道您使用什么算法/方法正在关注,我们想检查您的工作,但不重做,当算法允许时,我们需要您的选择,否则我们无法告诉您您在哪里做对或错,我们不想重写您的参考。请参阅How to Askhelp center,点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。基本问题是常见问题解答,在考虑在帖子中提问和反映研究之前进行研究。
  • 下划线和星号不是标准符号。使用块引用格式(阅读编辑帮助)来识别您复制的这篇文章的部分,并告诉我们您从哪里复制它们,并告诉我们这些东西是从您复制的演示文稿中定义的。不要在没有信用的情况下复制/引用。不是自己创作的不要说“我的”,那是抄袭。请通过编辑而不是 cmets 进行澄清。 How to Askhelp centerMeta Stack OverflowMeta Stack Exchange

标签: database database-design database-normalization third-normal-form


【解决方案1】:

不,它不完全是 3NF,因为您在 StaffProject 表中复制了 SNameStaffProject

表格应该是:

员工详情

Column Data Type Constraints
StaffDetails VARCHAR2 Primary Key
SName VARCHAR2
DOB DATE
DivisionNo INT Foreign Key(Division)

部门

Column Data Type Constraints
DivisionNo INT Primary Key
DivName VARCHAR2 (Probably Unique)
DivSupervisorID VARCHAR2 Foreign Key(StaffDetails)

员工项目

Column Data Type Constraints
StaffID VARCHAR2 Composite Primary Key, Foreign Key(StaffDetails)
ProjectNo VARCHAR2 Composite Primary Key, Foreign Key(Project)
HoursAssigned NUMBER Check > 0

项目

Column Data Type Constraints
ProjectNo INT Primary Key
ProjectName VARCHAR2 (Probably unique)

至于您的符号问题,这是您的导师似乎正在使用的惯例,但不一定是全球公认的,因此您最好问他们;但是似乎主键带有下划线,而外键旁边有一个星号。

StaffProject 的列既是复合主键的一部分,又是外键的一部分,因此会有两种表示法。

【讨论】:

  • 嗨@MTO,复合主键是指用作主键的外键吗?
  • 我注意到在 Division 表中,DivSupervisorID 被称为 StaffDetails 表的外键?这是否意味着我应该用星号表示它?
  • 是的,因为它是引用 StaffDetails PK 的外键
【解决方案2】:

表的主键上的一列或多列也可以是另一个表的外键。

在您的示例中,似乎:

  • (StaffId, ProjectNo) 是StaffProject 的PK。
  • StaffId 也是对桌子的 FK StaffDetails;这就是为什么它有一个星号。
  • ProjectNo 也是对桌子的 FK Project;这就是它本身带有星号的原因。

如果你希望你的模型是 3NF,你需要移除额外的依赖:

  • 在这种情况下DivNameDivSupervisorID 是多余的,应该从表StaffDetail 中删除。
  • ProjectNameSNameStaffProject 中也是多余的。您必须删除它们才能使模型符合 3NF。

【讨论】:

  • 所以如果一个表的外键被用作另一个表的主键,它应该用星号下划线是你的意思吗?
  • 当一个表本身没有PK,而是使用其他表(或它们的组合)的键作为它的PK,则称为“弱实体”。符号会有所不同,星号似乎只是在这种特殊情况下的符号。
猜你喜欢
  • 2011-11-24
  • 2017-01-18
  • 2013-12-13
  • 2017-04-03
  • 2021-09-25
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
相关资源
最近更新 更多