我的数据库中的一些用户也将是从业者。
这可以用以下两种方式表示:
我不清楚哪种方法更好。
旗帜的优点:
新表的优点:
就我而言,目前,与从业者相关的信息通常是一对多的(例如他们可以工作的地点,或者他们可以工作的班次等)。如果转向我需要为从业者存储简单属性(即一对一),我一点都不会感到惊讶。
问题
答案 0 :(得分:1)
你可能想要考虑这样一个事实,即今天的实践者,明天是另一回事。 (并且,我并不是说,不是从业者)。比如说,顾问,作者或您主题领域中的任何变体,您可能希望在“用户”表中跟踪他的最新状态。因此,拥有ProfType字段(专业实践类型)或等效字段可能是有意义的。这样,您拥有标志的所有优点,您可以将其保留为字符串字段并将其保留为空白字符串,或者在需求增长时将其填充为其他Prof.Type代码。
你提到,有一张新桌子,有找到练习者的优势。不,你最好在users表上使用WHERE子句。
然而,您的最后一段(一对多)可能会倾向于整个选择,转而使用单独的表格。您可能还需要考虑,可能的记录数量,可能的增长,复杂查询的重要性等。
答案 1 :(得分:1)
我尝试绘制两个场景,图像中有一些注释。它只是一个草案,只是为了帮助你“看到”各种实体。可能你已经做过类似的事了:在这种情况下请不要考虑我的答案。正如Whirl在他的最后一段中所述,你也应该考虑其他事情。
答案 2 :(得分:1)
就我个人而言,我会选择一个单独的表格 - 只要您已经识别出一些仅对于从业者有意义的额外数据(例如:完整的职业头衔,大学,医院或与从业者相关的任何其他实体)。
因此,如果您将来发现更多仅对于从业者有意义的数据和/或识别用户的另一个不同的“子类型”(例如实习生),您只需将字段添加到Practitioner子表或新表中即可实习生。
使用上面@Whirl Mind建议的用户类型字段可能是有利的。
我认为这只是必须在数据库中识别不同类型的对象的一个示例,为此我在此处参考我以前的一个答案:Designing SQL database to represent OO class hierarchy