最近在学习数据库,但很少看到有适合入门的设计参考,故写下一个自己的实际
设计以备忘。
首先,我们来讲一个故事:
从前有座山,山里有座庙(temple),庙里住着一位老和尚(monk),他给小和
尚们讲故事,故事是这样的:从前这座山上有很多座庙,而且不止这一座山上有
庙,附近很多山上都有庙,但是没有一座庙可以建在两座或者更多山上,也没有
任何两座庙的名字是重复的。每个和尚只能属于一座庙,他们都有一个法号, 和
尚的法号是不会重复的。当一名和尚的年龄足够高(每座庙的阈值有所不同) ,
他就可以成为老和尚。每座庙都必须有一名老和尚来主持,普通和尚是不能当住
持的。当然,一名老和尚只能主持他所属的庙而不能主持其他的庙。和尚们每天
都要做功课,比如去河边打水、去井边打水、去后院念经、去操场练功、去大殿
维持秩序等等。没有说和尚不可以去河边练功或者去大殿念经。每个地点都有最
大容量。庙里有张日程表记录和尚每天几点到几点应该去哪里做什么功课,而且
和尚不会在同一天去同样地点做两次同类型的功课。 和尚每做完一次功课都要给
一名特定的老和尚汇报。和尚们最愿意做的功课就是管理功德簿。一名和尚可以
管理多个功德簿,一个功德簿也可以由多名和尚管理。每个功德簿会有一个编号
以防弄混。功德簿上记录了若干名香客的信息,包括他们的名字和性别,以及他
们历史捐赠的总额。一名香客的信息只会出现在一个功德簿上,为了防止弄混,
相同姓名和性别的香客的信息会被记录在不同的功德簿上。这个问题很重要, 因
为其他庙都是因为记录混乱引起香客们不满而倒闭了。
故事讲完,那么问题来了:
提取实体以及它们的属性,并通过 ER 模型将其表示出来,那么这个ER模型会是
怎样的呢?
以下是一个简单的设计
相关问题讨论:
1)山应该是实体集还是属性?为什么?
实体集。山有山名、位置等多个属性,山和庙之间是一对多关系,若设置为属性则会有有大量的冗余信息。
2)日程表的主码是什么?
{开始时间,结束时间,类型,地名,法号}
3)是否用到聚合,在哪里用到,为什么要用聚合?
用到。老和尚对和尚做功课的监督。存在使老和尚这一实体集和联系集执行相关联的关系。
4)香客是弱实体吗,如果是的话,怎么唯一确定一个香客?
是。使用{功德簿编号,名字,性别,历史捐赠总和}