Sql 数据库规范化、数字主键或字符串
我不得不就此与我的教授争论,但他坚持认为我的解决方案是反常的,可能会引起冲突。他补充说,我无法理解数据库设计的概念 但是,他无法向我解释为什么他的解决方案是正确的,而我的解决方案是错误的 问题是关于以下kena数据库表的数据库规范化: 我的答案在左边,教授的答案在右边: 更好的视图:Sql 数据库规范化、数字主键或字符串,sql,database,normalization,Sql,Database,Normalization,我不得不就此与我的教授争论,但他坚持认为我的解决方案是反常的,可能会引起冲突。他补充说,我无法理解数据库设计的概念 但是,他无法向我解释为什么他的解决方案是正确的,而我的解决方案是错误的 问题是关于以下kena数据库表的数据库规范化: 我的答案在左边,教授的答案在右边: 更好的视图: 你认为我的错误是什么?为什么你认为他说我的答案远非正确?这里没有太多的实际答案,但接下来。。。你的教授是对的 小计不适用于项目概念-不属于该表 雇员-同样-看起来没问题-但实际上,职业类别可能会随着时间的推移
你认为我的错误是什么?为什么你认为他说我的答案远非正确?这里没有太多的实际答案,但接下来。。。你的教授是对的
此外,项目负责人似乎是一个额外的概念。不应该是这个答案的一部分,因为它似乎没有出现在您正在处理的基表中。这里实际回答的内容不多-但这里是。。。你的教授是对的
此外,项目负责人似乎是一个额外的概念。不应该是这个答案的一部分,因为它似乎没有出现在您正在处理的基表中。有两个显著的区别 首先,您似乎将小计存储在项目中。这是重复的信息-你可以通过汇总每个项目的费用来得到小计。数据库设计的一个关键方面是“不要重复你自己” 第二个问题是,您为“jobclass”创建了一个无意义的主键,而您的教授使用jobclass的名称作为主键
理想情况下,您希望主键是唯一的(两种解决方案都满足这一点)。您还希望它保持不变—这就是我将您的解决方案列为更好的解决方案的地方—当您更改作业类“sys analyst”的描述时会发生什么 有两个显著差异 首先,您似乎将小计存储在项目中。这是重复的信息-你可以通过汇总每个项目的费用来得到小计。数据库设计的一个关键方面是“不要重复你自己” 第二个问题是,您为“jobclass”创建了一个无意义的主键,而您的教授使用jobclass的名称作为主键
理想情况下,您希望主键是唯一的(两种解决方案都满足这一点)。您还希望它保持不变—这就是我将您的解决方案列为更好的解决方案的地方—当您更改作业类“sys analyst”的描述时会发生什么 这是自然密钥与代理密钥的问题吗?我们有这些。还是关于项目表中的小计?这确实是一个3NF冲突。这是一个自然密钥与代理密钥的问题吗?我们有这些。还是关于项目表中的小计?这确实是一个3NF冲突。无论您使用jobclass名称还是代理键,从实用的角度来看,两者都是正确的。如果使用该名称,则很难更改该名称,因为它正被用作FK关系的一部分。这就是为什么像您的答案中那样的代理ID通常被分配的原因 它也更节省空间(这是一个物理问题)
主键应该是小而稳定的,所以我喜欢基于ID的解决方案。无论您使用jobclass名称还是代理键,从实用的角度来看,两者都是正确的。如果使用该名称,则很难更改该名称,因为它正被用作FK关系的一部分。这就是为什么像您的答案中那样的代理ID通常被分配的原因 它也更节省空间(这是一个物理问题)
主键应该小而稳定,所以我喜欢基于ID的解决方案。我在这里看到一些问题
不,你走得太远了。您包含了两个派生字段,这是建模3nf时非常常见的错误。你的教授也不太可能,但如果我采访他的话,我会更深入一点 我在这里看到了一些问题
不,你走得太远了。您包含了两个派生字段,这是建模3nf时非常常见的错误。你的教授也不太可能,但如果我采访他的话,我会更深入一点 但是我是不是很不正确?但是我是不是很不正确?你为什么认为