当然,我也很想要一些糟糕设计的数据库的好例子,但在掌握基本原理之前会有些分散注意力。
谢谢,一些不错的例子。我将学生/班级的标记为答案,因为我认为这是迄今为止最好的,但如果有人想贡献更多,请随时提供。
我记得学生/班级似乎是一个经典的例子,你可以在里面加入成绩,使它变得更加复杂。
学生可以参加多个课程
课程可以有多个学生
对于学生参加的每一门课程,他们都可以有一个成绩
最初你可以在一张表中完成这个任务,然后再将其规范化为三张表。
离题
作为一名教授数据库课程的人,我建议在掌握基本查询技能之前先忘记设计。只有当学生们了解如何从数据库中获取数据后,他们才更好地理解规范化的必要性。如果你从规范化和设计开始讲解,你会失去大部分学生的兴趣。设计应该是数据库课程的最后一个模块,但我看过的所有教材都是从设计开始的。
更好的方法是在学习查询时同时查询好的和坏的数据库设计,这样当到了讲解设计的时候,他们真正理解坏设计带来的痛苦。
这需要时间和经验来设计表格,阅读好的材料,例如书籍Database Design For Mere Mortals和Data Modeling for Everyone。此外,花费大量时间查看好的设计并分析它们。这绝对是一门手艺,只有通过时间和实践才能变得更好。
另一个好的模型是发票项目模型,因为“最佳选择”取决于各种因素:
查看此数据模型:
发票
发票项目
应用程序功能包括:
假设您每天平均有5个项目的发票和100张发票,您每天需要执行以下操作:
所以总共是=每天1800次操作,假设读取和写入的成本相同。
如果在实体"Invoice"上添加"TotalAmount"属性,则情况有些不同:
总共800次操作:)
在一些课程中,讲师也会兼任导师的角色,以便更近距离地观察学生如何掌握材料。
有些导师也是其他课程的讲师。
要成为某门课程的导师,你必须曾经是该课程的学生。
并非每个学生都会因通过课程而获得学分——有些人只是旁听课程,不需要学分。
未通过课程的学生可以在以后再次参加该课程。我们需要记录每次尝试的情况。
还有一个图书馆的例子(一个图书馆有很多书,每本书都有作者和出版商,可以将它们分别推入不同的表中进行规范化)。
回复:
我尤其想找一些好的规范化示例: 那些不符合3NF和BCNF的表。
您可以在此处找到规范化数据库模式样本:http://www.microsoft.com/sqlserver/2005/en/us/express-starter-schemas.aspx。您可以从头开始构建它们,向您的学生展示“规范化的方法”。特别是看看联系人管理模式。您可以轻松地使模式去规范化并将其恢复为3NF或更高级别。
Itzik Ben Gan的新书《Microsoft SQL Server 2008:T-SQL基础》中有一个非常基本的例子,你可以看到它是从一个简化的Northwind数据库派生出来的。