这个俱乐部会员制度是用java制作的。我已经完成的是一个数据库,其中有一个名为accounts的表,其中存储了已注册的成员和管理员,该表的字段是username,firstname,lastname,password,date_join,role等...
到目前为止,我们的计划所做的是,如果该人注册,那么他自动成为会员,直到管理员也将他作为管理员推广,会员在系统中具有有限的权限,而不像具有完全权限的管理员。
我们的教授表示,我们需要修改我们的计划,并为想要加入我们俱乐部的任何人添加付款要求,会员资格应在一定时间内到期。
由于我们在俱乐部缺乏经验,我们不知道应该如何实施这一额外功能。是否需要为付款创建另一个表并将其链接到帐户表?在该计划中,注册用户是否应该在成功注册之前首先支付一定的俱乐部费用?或者他现在可以注册然后再付款?当他的帐户到期时,如果他没有续订会员资格,他是否会被从数据库中删除?
任何一个对这种系统有所了解的人,可以建议一个好的实现吗? 提前谢谢。
答案 0 :(得分:5)
从简单开始,命名您要管理的所有名词。那些是你的桌名。
然后考虑与您可能想要跟踪的每个名词有关的所有形容词。如果一组形容词适合某个类别,则在相关表格中创建一个列。如果形容词总是适用于每个可能的名词,那么就忽略它。数据库用于跟踪随时间变化的数据,最好不存储常量。
然后想想那些不容错过的形容词。如果您允许选择退出生日提醒,则可能会丢失一个人的出生日期。也许你的俱乐部是一个以生日为导向的俱乐部,缺少名字就等于混乱。
然后看看所需的形容词。找一些自己或组合的识别表中的条目。对于某些人来说,可能会通过他们的名称来标识Person,这意味着每个不同的名称都会导致访问不同的Person,并且每个相同的名称都会导致访问同一个Person。如果您曾经遇到过两个John Smiths,或者因婚姻而改变了您的名字,您可以立即看到单独的名称列不是确定身份的理想方式。标识字段的集合称为主键。
然后想想名词是如何相关的。如果会员资格与人员不同,那么您需要将两者加入。连接表有三种基本技术,并且有更多高级技术可能最好在以后应用。
一个X(Person)只能与一个Y(Membership)关联,然后X和Y表可能是合并到一个表中的候选者。这称为1:1关系。
一个X(Person)与许多Y(成员资格)相关联,然后Y(成员资格)表应包含对与其关联的X(Person)的主键的外键引用。这被称为1:N关系。
许多X(人)与一个Y(成员资格)相关联,然后X(人)表应包含对其与之关联的Y(成员)主键的外键引用。这称为N:1关系
许多X(人)与许多Y(会员资格)相关联。简而言之,一个人可能拥有特定的会员资格,成为团体会员资格的一部分,可能已经购买了多会员资格,和/或可能只有一个会员资格。在这种情况下,您需要管理与构造的“关系”表的关系,该表包含两个外键引用,每个主键对应一个X和Y.最后,这两个外键引用可能应该(组合)为关系XY(PersonMembership)表的主键。
还有其他方法可以连接表,但基本上它们是最后一种技术的扩展,可以提高连接表的数量。
这将为您提供一个良好的开端,您很快就会发现您所做的选择与其他人的选择不同,这就是为什么标准数据库表集很少的原因。一旦你启动并运行了一个基本框架,你会发现你可能总是同时提取两组相关数据,然后(如果你走得那么远)你可能会考虑打破一些性能规则。只是不要试图从一开始就打破规则;你必须遵守规则才能知道何时打破它们。这样,你就会知道你在获得目标方面失去了什么,并且确实避免了实际使用中引入的陷阱。