从简单的开始,命名您希望管理的所有名词。这些是你的表名。
然后考虑与您可能要跟踪的每个名词有关的所有形容词。如果一组形容词适合某个类别,则在关联表中创建一列。如果形容词总是适用于所有可能的名词,那么就忽略它。数据库旨在跟踪随时间变化的数据,最好不要存储常量。
然后想想不能缺少的形容词。如果您允许选择退出生日提醒,则可能会丢失某人的出生日期。也许您的俱乐部是一个以生日为导向的俱乐部,而缺少名字将无异于混乱。
然后查看所需的形容词。找到一些单独或组合识别表格中的条目的条目。对于某些人来说,一个人可能通过他们的名字来识别,这意味着每个不相同的名字都会导致访问不同的人,而每个相同的名字都会导致访问同一个人。如果您曾经遇到过两个 John Smith,或者曾经因结婚而改名,您会立即发现,仅使用姓名列并不是确定身份的理想方式。标识字段的集合称为主键。
然后想想名词是如何相关的。如果 Membership 与 Person 不同,则需要将两者结合在一起。连接表有三种基本技术,还有更高级的技术,以后可能最好应用。
一个 X(Person)只能与一个 Y(Membership)关联,那么 X 和 Y 表可能是合并为一个表的候选者。这称为 1:1 关系。
一个 X(Person)关联了多个 Y(Memberships),那么 Y(Membership)表应该包含一个外键引用,指向与之关联的 X(Person)的主键。这称为 1:N 关系。
许多 X(Persons)与一个 Y(Membership)相关联,那么 X(Person)表应该包含一个外键引用,指向与之关联的 Y(Membership)的主键。这称为 N:1 关系
许多 X(人员)与许多 Y(成员)相关联。简而言之,一个人可能具有特定的会员资格,是团体会员资格的一部分,可能已经购买了多会员资格套餐,和/或可能只有一个会员资格。在这种情况下,您需要使用构造的“关系”表来管理关系,该表包含两个外键引用,一个指向 X 和 Y 的每个主键。最后,这两个外键引用可能应该(组合)是关系 XY (PersonMembership) 表的主键。
还有其他连接表的方法,但基本上它们是最后一种技术的扩展,您可以增加连接表的数量。
这将为您提供一个良好的开端,并且您很快就会发现您做出的选择与其他任何人都会做出的选择不同,这就是标准数据库表集很少的原因。一旦你建立并运行了一个基本框架,你会发现你可能总是同时提取两组相关数据,然后(如果你走那么远)你可能会考虑打破一些性能规则. 只是不要试图从一开始就打破规则;您必须遵守规则才能知道何时违反规则。这样,您就会知道在实现目标时会失去什么,并且确实避免了在实际使用中引入的陷阱。