【发布时间】:2012-06-02 03:40:16
【问题描述】:
如需更多说明,请在此处查看我的旧帖子 Database normalization - who's right?
我很欣赏这些好的答案,但我想强调的是,我们正在制作的这个系统不仅仅是为了学习。这是我们学校真正的招生制度。我们大约四个月前开始工作,除了对非规范化的困惑之外,系统一切正常。
就像我说的,他的理由是: 1. 查询可能会被误删,造成更多问题。
他说第二范式就足够了,就像他根据过去的经验在他的所有系统中所做的那样。
与我们合作的人(没有足够的技术知识)无法从没有足够属性/行的表中进行他们想要的查询。(在我的例子中,我决定删除总单位,因为这很容易根据其他属性计算。)
计划将会计、工资、库存和采购等其他系统与注册系统集成。他说,如果是这种情况,最好将每个新系统数据库直接连接到我们的注册系统数据库,而无需访问查询。
他认为所有相关行,例如每个学生的计算平均成绩也必须包含在表中,因为他说,我们需要的是物理数据,而不是通过视图重新计算.
我猜更重要的是,他希望每笔交易都输入数据库。就像为了平衡交易而使用借记卡和贷记卡一样。
就我而言,根据我从他那里听到的消息,除了从查询中进行查询(我相信这是我们需要非规范化的主要原因)之外,他没有提到任何关于速度的内容。他只是想要数据库中记录的所有内容。
我的立场与所有这些相反。如果准确性是我们对速度的关注,那么规范化是完美的,顺便说一下我们使用的是 microsoft sql server。
最后一件事,我记得他想在 students_info 表中包含 full_name 列。他的理由?他说“从表中读取比再次查询要好。只要确保程序可以控制用户输入的全名”。
在我决定停止制作这个系统之前,请让经验丰富的人告诉我。
【问题讨论】:
-
我的意见:如果您不是在构建一个必须快速的网站,即轻微的速度损失不是问题,那么不要反规范化。我从所描述的系统中猜测,实际记录数将相对微不足道(没有冒犯,但我将 1m 行表算作很小),无论如何您几乎不会注意到差异。我们的网络服务器可以在一分半钟内全面扫描 1700 万行表,一台体面的笔记本电脑,如果查询写得好,应该能够在一秒或更短的时间内扫描包含 50000 条记录的表。
-
是的,现在只是很小,但我认为他想预测未来(与你的相比,这仍然相对较小!)。
标签: database system normalization denormalization