【发布时间】:2012-06-01 21:05:57
【问题描述】:
我的教授(他声称对系统开发有多年的深刻理解)和我正在争论我们数据库的设计。
例如: 我的教授坚持认为这个设计是正确的: (列列表)
Subject_ID
Description
Units_Lec
Units_Lab
Total_Units
等等……
注意总单位栏。他说这个栏目必须包括在内。 我试图解释它是不必要的,因为如果你想要它,那么只需将两者相加即可进行查询。
我向他展示了我在书中找到的一个示例,但他坚持认为我不必过多地依赖书籍来制作我们的系统。 同样的事情也适用于与此类似的情况:
student_ID
prelim_grade
midterm_grade
prefinal_grade
average
他希望我包括平均值!无论我走到哪里,我都能发现自己阅读的文章让我相信这违反了规范化。如果我需要平均值,我可以很容易地计算出三个等级。他列举了一些场景,包括('嘿!如果查询被意外删除了怎么办?你会怎么做?这就是为什么你需要将它包含在你的表中!')
我是否需要重建我的数据库(由大约 40 多个表组成)以符合他的要求?我错了,只是忽略了这些事情吗?
另一件事是他想在付款表中包含总金额,我认为这是不必要的。 (只需计算产品的单价和数量。)他指出,我们需要该列来计算对整个系统管理至关重要的借方和/或贷方,它是平衡交易所必需的。请告诉我你的想法。
【问题讨论】:
-
确实,您提供的是更规范化的解决方案。但请记住,您的教授会对您的解决方案进行评分。你可以以建设性的方式提出分歧。但你不应该偏离他对分歧的解决方案。
-
@redskins80 就在这里。但是应该注意的是,如果你想在他的课堂上取得好成绩,与你的教授争论太多绝不是一个好主意。不管他有多错……
-
Andomar 在这一点上是正确的。尽一切努力取得成绩。但是当你去参加工作面试时(见我在下面答案下的评论),确保你以正确的方式回答这个问题。
-
谢谢,但是那个项目不在课堂上。我想知道我怎样才能赢得争论。
-
我们举一个简单的例子,计算 3 个等级。但是,如果是一个更大的计算,每次查询运行需要 2-3 秒怎么办?你每天有成千上万的用户?我并不是说它应该存储在那个表中,但是 ETL 进程会定期预先计算要存储的数据以供 UI 访问,因此它不需要运行那个“快速”(或者你说“快速”)查询.
标签: sql sql-server database database-normalization redundancy