0

这个俱乐部会员系统是用java制作的。我已经做的是一个数据库,其中包含 1 个名为 accounts 的表,其中存储了注册成员和管理员,该表的字段是用户名、名字、姓氏、密码、date_join、角色等......

到目前为止,我们的程序所做的是,如果该人注册,那么他将自动成为会员,直到管理员也将他提升为管理员,会员在系统中具有有限的权限,这与具有完全权限的管理员不同。

我们的教授说我们需要修改我们的计划,并为任何想加入我们俱乐部的人增加付款要求,并且会员资格应在一定时间内到期。

由于我们缺乏在俱乐部方面的经验,我们不知道应该如何实现该附加功能。我们是否需要为付款创建另一个表并将其链接到帐户表?而在程序中,注册用户是否需要先支付一定的俱乐部费用才能注册成功?还是他现在可以注册然后再付款?当他的帐户到期时,如果他不更新他的会员资格,他是否会从数据库中删除?

任何人对这种系统有想法,并可以提出一个好的实施方案?提前致谢。

4

1 回答 1

5

从简单的开始,命名您希望管理的所有名词。这些是你的表名。

然后考虑与您可能要跟踪的每个名词有关的所有形容词。如果一组形容词适合某个类别,则在关联表中创建一列。如果形容词总是适用于所有可能的名词,那么就忽略它。数据库旨在跟踪随时间变化的数据,最好不要存储常量。

然后想想不能缺少的形容词。如果您允许选择退出生日提醒,则可能会丢失某人的出生日期。也许您的俱乐部是一个以生日为导向的俱乐部,而缺少名字将无异于混乱。

然后查看所需的形容词。找到一些单独或组合识别表格中的条目的条目。对于某些人来说,一个人可能通过他们的名字来识别,这意味着每个不相同的名字都会导致访问不同的人,而每个相同的名字都会导致访问同一个人。如果您曾经遇到过两个 John Smith,或者曾经因结婚而改名,您会立即发现,仅使用姓名列并不是确定身份的理想方式。标识字段的集合称为主键。

然后想想名词是如何相关的。如果 Membership 与 Person 不同,则需要将两者结合在一起。连接表有三种基本技术,还有更高级的技术,以后可能最好应用。

  1. 一个 X(Person)只能与一个 Y(Membership)关联,那么 X 和 Y 表可能是合并为一个表的候选者。这称为 1:1 关系。

  2. 一个 X(Person)关联了多个 Y(Memberships),那么 Y(Membership)表应该包含一个外键引用,指向与之关联的 X(Person)的主键。这称为 1:N 关系。

  3. 许多 X(Persons)与一个 Y(Membership)相关联,那么 X(Person)表应该包含一个外键引用,指向与之关联的 Y(Membership)的主键。这称为 N:1 关系

  4. 许多 X(人员)与许多 Y(成员)相关联。简而言之,一个人可能具有特定的会员资格,是团体会员资格的一部分,可能已经购买了多会员资格套餐,和/或可能只有一个会员资格。在这种情况下,您需要使用构造的“关系”表来管理关系,该表包含两个外键引用,一个指向 X 和 Y 的每个主键。最后,这两个外键引用可能应该(组合)是关系 XY (PersonMembership) 表的主键。

还有其他连接表的方法,但基本上它们是最后一种技术的扩展,您可以增加连接表的数量。

这将为您提供一个良好的开端,并且您很快就会发现您做出的选择与其他任何人都会做出的选择不同,这就是标准数据库表集很少的原因。一旦你建立并运行了一个基本框架,你会发现你可能总是同时提取两组相关数据,然后(如果你走那么远)你可能会考虑打破一些性能规则. 只是不要试图从一开始就打破规则;您必须遵守规则才能知道何时违反规则。这样,您就会知道在实现目标时会失去什么,并且确实避免了在实际使用中引入的陷阱。

于 2012-12-05T15:42:36.030 回答