我正在为Go / Baduk协会创建数据库。该协会组织定期围棋锦标赛。这些比赛的参与者可能是也可能不是该协会的成员。
我的第一个方法(A)是创建两个表: Person 和 Member 。对于每个 Person ,我只需要字段名称,电子邮件和国籍。然后,成员将成为具有额外字段的 Person 。 成员的主键是来自 Person 的外键。这是一对一的关系 - 我知道应该避免这种关系。
然后我认为更好的方法(B)可以是单个表, Person ,其中一个布尔字段称为 IsMember ,如果 IsMember 为真,则额外字段仅是必需/必需的。
您对此有何看法?哪种方法(A或B)是正确的?
提前谢谢。
答案 0 :(得分:0)
根据以下输入,您可以做出决定。
方法A
您可以避免第一个表上的不需要的数据,并且第二个表的额外列不会有任何空值。如果您的应用程序增长,这将节省一些空间。这对性能也有帮助。 当您来到您的应用程序时,您将不得不对第二个表运行额外的查询以检查该人是否是成员。 如果您考虑在人员表中有一个IsMember列,那么如果该人不是其成员,则可以避免第二个查询。
方法B
您将所有数据放在同一个地方。在这里,您将在表格中使用null或空格(首选)。您将拥有该列以确定此人是否为成员。 当涉及到您的应用程序时,您只需要查询一次即可获得此人。 假设您系统中的大多数人都不是成员,那么这种方法会很糟糕,因为您将存储更多的空值。
根据Joel的评论,最终方法应取决于您的数据。