有没有人有任何关于教授关系数据库和SQL的好方案?我能找到的所有例子都是微不足道的或者有不可能的域约束(比如全名是唯一的)。
我特别想找到一些标准化的好例子:不能立即适应3NF和BCNF的表格。目前我正在为每个级别使用不同的问题。
当然,我也喜欢设计糟糕的数据库的好例子,但是在掌握了基础知识之前,它会有点分散注意力。
谢谢,一些很好的例子。我已经将学生/班级标记为答案,因为我认为这是目前为止最好的答案,但如果有人想要贡献更多,请做。
答案 0 :(得分:9)
我似乎记得学生/班级是经典之作,你也可以将成绩放在那里以使其更复杂。
学生可以参加很多课程
课程有很多学生
对于每个班级,学生都可以参加
最初,您可以在一个表中执行此操作,并将其归一化为三个。
答案 1 :(得分:6)
关闭主题
在教过数据库课程后,我建议忘记设计,直到掌握了查询的基础知识。一旦人们理解了如何从数据库中获取数据,人们就会更加理解对规范化的需求。如果你从规范化和设计开始,你将失去大部分学生在课堂上的其余部分。设计应该是数据库课程的最后一个模块,但我所评论的所有教科书都是从它开始的。
更好地让他们在学习查询时查询好的和坏的数据库设计,然后他们将真正理解在教授设计时糟糕的设计是多么痛苦。
答案 2 :(得分:2)
电子商务/购物车设计很好,因为大多数人都了解这个概念,你可以将它推向多个不同的方向。
您可以执行简单的操作,例如cart,cart_items,用户,订单,order_items等。
然后你可以更深入地了解user_addresses,user_emails,items,item_details,item_history等。
这可以提供很多好的辩论,因为有很多判断要求。
答案 3 :(得分:1)
我永远不会忘记的一个概念是命名的整个“复数”与“奇异”的东西。我曾经回过头来的一位伟大的导师告诉我,你应该将你的表名设计为复数,你的列名称应该是单数,并且你永远不会为列名创建特定于时间的名称。时间名称示例包括NutsSold1998,NutsSold1999,NutsSold2000等。切勿在列名称中添加年份,月份或周数或时间等。
表名示例: 员工(非员工) 零件(不是零件) 学生(学生)
列名示例: EmployeeID(不是EmployeesID或EmployeeIDS等) PartID(不是PartsID或PartIDS等) StudentID(不是StudentsID或StudentIDS等)
并注意正确使用ID,代码,密钥,数字等...我总是被教导不要在列的名称中使用“密钥”,除非它是一个实际的表密钥(主要或外来的,但不一定是交替的)..大多数时候附加“ID”将是一个比附加“数字”或“代码”更好的选择,但这一切都取决于上下文。
这需要时间和经验来设计表格,阅读好书材料,如书籍Database Design For Mere Mortals和Data Modeling for Everyone。此外,花费大量时间看好设计并将它们分开。它绝对是一种工艺,你只会随着时间和练习而变得更好。
答案 4 :(得分:1)
这是一个可以追溯到我自己的大学时代的例子 - 它既被用作数据库设计挑战又被用作面向对象的设计挑战。
并非所有信息都是立即显示出来的 - 部分挑战是了解如何调整设计以应对新要求,以及正确的规范化如何使这更容易。
假设您必须为大学/大学情况设计数据库并希望处理注册。
您教授了课程。每门课程每周都有一个标题和一个常规时段。
每门课程都有讲师,他们会参加课程。
每门课程都有很多学生来学习该课程。
每个课程都有一个或多个导师,帮助学生完成学习。您无需跟踪哪些辅导员可以帮助哪些学生。
有些课程有多个常规时段。
有些课程有多个讲师。
讲师和导师是有偿的,这意味着我们需要为税务目的跟踪一些信息。税务部门并不关心他们的收入 - 他们希望我们每个人都有一份记录。
在某些课程中,讲师也是一名导师,以便近距离了解一些学生如何处理这些材料。
一些导师也是其他课程的讲师。
要成为课程导师,您必须在较早时间成为该课程的学生。
并非每个学生都能获得通过该课程的学分 - 有些只是在不需要学分的情况下审核课程。
未通过课程的学生可以稍后再次参加该课程。我们需要保留每次尝试的记录。
答案 5 :(得分:0)
总有图书馆的例子(一个图书馆有很多书,每本书都有一个作者和出版商,可以在你标准化时被推入单独的表中)
答案 6 :(得分:0)
回复:
我特别想找一些 规范化的好例子: 表格不能立即适合3NF 和BCNF。
您可以在此处找到规范化数据库架构示例:http://www.microsoft.com/sqlserver/2005/en/us/express-starter-schemas.aspx。您可以从头开始构建它们,向学生展示“规范化的方式”。特别要看一下Contact Management架构。您可以轻松地对模式进行非规范化,并将其恢复到3NF或更深层次。
答案 7 :(得分:0)
Itzik Ben Gan的新书Microsoft SQL Server 2008:T-SQL Fundamentals,有一个非常基本的例子,你可以看到它来自简化的Northwind数据库。
Microsoft SQL Server 2008: T-SQL Fundamentals author support page
答案 8 :(得分:0)
另一个好的模型是发票项目模型,因为“最佳选择”取决于各种因素:
看看这个数据模型:
发票
InvoiceItem
应用功能是:
假设您每天平均有5件物品和每天100张发票,您最终会每天都这样做:
所以总计= 1800次操作/天,假设读取和写入具有相同的成本。
如果在实体“Invoice”上添加“TotalAmount”属性,情况会有所不同:
共有800次操作:)