我正在为Go/Baduk协会创建一个数据库。这个协会定期组织围棋比赛。参加这些比赛的人可能是也可能不是协会的成员。
我的第一个方法(A)是创建两个表: Person和Member。对于每个人,我只需要字段名称,电子邮件和国籍。然后,一个成员将是一个拥有额外字段的人。成员的主密钥将是来自个人的外键。这是一对一的关系,我知道这是应该避免的。
然后,我认为一个更好的方法(B)可以是一个表Person,其中有一个名为IsMember的布尔字段,只有在IsMember为真的情况下,额外的字段才是必需的/强制的。
你对此有何看法?哪种方法(A或B)是正确的?
提前谢谢你。
发布于 2018-03-28 03:45:52
根据下面的输入,您可以做出决定。
方法A
避免了第一个表上不需要的数据,而第二个表对于额外的列将没有任何空值。这将节省一些空间,如果您的应用程序增长。在性能上也会有所帮助。当您访问应用程序时,您必须对第二个表运行一个额外的查询,以检查此人是否是成员。如果考虑在person表中有一个IsMember列,则如果person不是成员,则可以避免第二个查询。
方法B
你把所有的数据都放在同一个地方。在这里,您将在table.You中使用空或空格(首选)来确定此人是否是成员。当涉及到您的应用程序时,您只需要查询一次就可以得到此人。假设您系统中的大多数人都不是成员,那么这种方法将是不好的,因为您将存储更多的空值。
根据Joel的评论,最后的方法应该取决于您的数据。
https://stackoverflow.com/questions/49517937
复制相似问题