我有一个数据库的作业,制作一个网站,我准备用PHP+MYSQL完成这个project
因为我从来没有做过WEB开发,所以还是挺有难度的,所以想请CSDN的高手帮我分析一下数据库结构,如何设计会比较合理而且更加容易开发
这个作业还有10多天就要交了,所以请大家帮帮忙,谢谢了下面是这个作业的要求,原文是英文的,我翻译了一下,可能有些地方翻译得不是很准确,请见谅你被请来设计一个数据库应用,ReadingNet,用来支持非营利组织的书本捐赠计划。这个数据库应用需要store, update, delete, query数据。因为使用这个系统的用户并不懂SQL,所以你的应用要有一个接口用来update, delete, query 储存在数据库中的数据。这必须是一个完整的应用以便所有的交易都可以通过用户接口来完成,结果也可以通过应用程序的接口呈现给用户。以下是这个组织的要求:
ReadingNet想储存和查询donor (赠书者)和volunteer(志愿者)的信息。储存每个赠书者的ID,Phone#,email, address, first name, last name, date of birth, zip code(邮编), and gender(性别)。ReadingNet还要存储客户的信息(ReadingNet要把书捐给的组织)。对每个客户来说,client ID, Organization name(组织名), phone number, email, address, contact person name(联系人姓名) 需要被存储(不是所有的客户都有联系人)。ReadingNet需要存储可以提供给客户的书籍详单,包括书籍的ISBN, title(标题), author(作者), suggested reading level(建议的阅读等级), publisher(出版商), genre(种类)。书的ISBN单独识别书籍。对每一本书来说,存在一个title, suggested reading level, publisher, genre。一本书可能有一个或者多个author(作者)。如果一本书的新版本发行了,它有一个新的ISBN,不管它不是由同一个publisher(出版商)发行。ReadingNet给每本书定义了一个status(状态),new or gently used(新的或者是稍微使用过的)。在这些书当中,可能有同一本书的不同状态的拷贝,new and genly used. ReadingNet还在数据库中保存了所有genre(种类)的清单和genre的描述。另外,suggested reading level(建议阅读等级)也要保存在数据库中。对每个客户来说,他的reading level(阅读等级)也需要被储存。只有Volunteer(志愿者)可以把donor(赠书者)和client(客户)添加到数据库,Volunteer还可以把Volunteer添加到数据库。Volunteer和client被允许访问ReadingNet应用,而donor不可以访问。只有Volunteer可以发出query请求。ReadingNet提供的书籍是由donor捐赠的。当donor捐赠书籍的时候,volunteer必须输入书籍的信息,书本的数量,捐赠日期,捐赠人。更新Inventory(仓库)以便体现这次新的捐赠。如果有着同样status(状态),edition(版本)的书已经存在于inventory,需要更新这本书的数量来反映这次新的捐赠。否则,需要在inventory(仓库)里面创建一个新的entry(条目)。 Donor还可以捐现金,the amount donated(捐赠的金额),date(日期),donor(捐赠人)需要被储存。ReadingNet还可以用donor捐赠的钱购买书籍。只要ReadingNet购买了一本书,购书的volunteer必须被储存,还需要被储存的有:book(我想应该是书的ISBN),status(状态),edition(版本),quantity(数量)。因为ReadingNet是靠donor的钱来购买书籍,所以每一次购书,程序都要确定ReadingNet有足够的钱来支付这次采购。因此,每一次购书,donor捐赠的钱的总和-用过的钱>=购书的钱,否则,交易取消。为了避免客户不公平的分享书籍,ReadingNet采用token system(令牌系统)。客户可以通过令牌来购书。一旦客户加入ReadingNet, volunteer就发放一个令牌号(X)给他。当客户第一次加入ReadingNet,X令牌被自动添加到客户帐号。当这个客户从ReadingNet选择书的时候,就从客户的令牌账户扣除这本书的花费。新书花3个token(令牌),稍微使用过的书籍花费一个token。ReadingNet会定期的给用户的帐号发放X数量的token(这里的X是由volunteer定义的数)。因为ReadingNet是非营利的,所以它依靠捐赠来维持inventory(库存)。 因此,volunteer必须手动点按钮来发放更多的token。当一个客户想要买书的时候,他可以输入搜索条目,例如:ISBN,title, author, publisher. 不是4个条目都必须输入,但是必须至少输入其中的一项。如果符合搜索选项的结果很多,把结果连同书的数量都返回给客户。要买一本书,客户必须选择他要买的书,并且输入他要买的书的数量。如果完成购买以后,inventory(仓库)里不再有那个版本和status(新旧状态)的书剩余,这个条目就需要从仓库里被删除.另外,ReadingNet程序查询以确定和书籍相关联的suggested reading level(建议阅读等级)和客户的reading level(阅读等级)符合。如果客户想购买阅读等级和自己不符的书籍,把请求储存以等待批准。只有volunteer可以批准请求。一旦请求被批准,把token从客户的account(账户)中移除,然后把书从inventory(仓库)中移除。如果请求没有被批准,客户的账户和仓库都不发生变化。要求你应用所有下面列出的交易和查询。当你设计数据库的时候, 需要把这些作为考量,而且应用在你的程序中。1. 能够insert, update, delete所有被volunteer定义的列表。2. 能够query所有在数据库中的数据。3. 能够query依据条目来查询数据4. 哪一个作者捐过他们写的书?5. 谁是捐钱最频繁的donor?6. 发放给客户的average, max, minimum number of token是什么?7. 对于每一个genre(种类),在inventory(仓库里)存在多少这种类型的书?对于每一种阅读等级,在仓库中存在多少本书?对于特定的genre(种类)和reading level(阅读等级),又存在多少本?8. 哪一本书在仓库中的拷贝比其他的多,不管它的status(状态)是new还是used。如果同样多的,列出所有这些的书籍。
9. ReadingNet发送邀请给donor以吸引更多的人成为在California, New York 和 Illinois的volunteer。显示居住在California, New York, Illinois的donor的name和address信息,这些donor要是18-24岁或者65岁以上的。如果这个人已经是volunteer,不要再把他列出来。10. 允许volunteer选择一个或者多个genre,同时,显示购买所有genre(种类)的new(新)和gently used(稍微使用过的)书的客户。例如,如果一个客户选择种类“a”和“b”,这个查询应该要显示这些客户:购买了种类为“a”的稍微使用和新的书,而且,种类为“b”的稍微使用和新的书。11. 哪本书的title符合用户输入的string? 同时支持full和partial配对。因此,如果输入“apple”,结果应该符合“apple”,“green apple”,“apple pie”等等.(是否大小写敏感取决于你)。12. 对于一个给定的donor, 列出他的历史捐赠记录(包括捐赠的物品以及时间)。13. 一个volunteer在过去几个月中从ReadingNet购买了多少本书?14. 哪一个client(客户)从一个给定的author(作者)那里购买了一本书(作者是输入的)。15. 列出在仓库中有至少2本new书的出版商,同时他们在仓库中拥有不超过5本稍微使用过的书(注意:在此次查询中,书的数量指不同的ISBN的数量)16. ReadingNet喜欢给它的donor发感谢卡或小礼物。个人收到什么样的礼物取决于他捐了多少。因为donor可以捐现金和书籍,总数是这样计算的:现金+10*使用过的书+20*新书。基于用户输入的数额,显示捐赠额超过这个数额的donor的名字和地址。17. 为了确定何时发放更多的token(令牌), ReadingNet必须有一个方式来确定他们的仓库是如何比较需求。因此,对每一个reading level,显示这个reading level,连同书本和客户的比例。18. 哪个客户已经购买了书,并且等待批准?

解决方案 »

  1.   

    内容太长了,帮你顶一下吧。估计认真读完并理解你的需求需要 1 个小时,如果楼主真得很急,不如到CSDN 的项目 http://prj.csdn.net/ 中招标一下,估计 200-500 元就搞定了。
      

  2.   

    楼主啊,数据可结构在要求中已经说得很详细了啊!如:ReadingNet想储存和查询donor (赠书者)和volunteer(志愿者)的信息。储存每个赠书者的ID,Phone#,email, address, first name, last name, date of birth, zip code(邮编), and gender(性别)。ReadingNet还要存储客户的信息(ReadingNet要把书捐给的组织)。对每个客户来说,client ID, Organization name(组织名), phone number, email, address, contact person name(联系人姓名) 需要被存储(不是所有的客户都有联系人)。表和字段都列出来了啊,这么幸福的事情国内是很难找的啊。
      

  3.   

    Too complex,
    Nobody can do it for you,but money.