MySQL - 父级查找子类属性的最有效方法?

时间:2013-12-26 21:02:03

标签: mysql join subclass

我正在尝试在MySQL中实现子类模式,如下所述:

http://www.tomjewett.com/dbdesign/dbdesign.php?page=subclass.php

根据上面的文章,没有必要为父表提供外键。 (“请注意,父表中没有属性告诉我们学生是TA,RA还是两者 - 两个外部联接查询的并集将生成一个包含我们需要的所有信息的表”)< / p>

这真的是最好的模式吗?

在我的项目中,我正在尝试为父表中的记录实现完整的,不相交的特化。例如,我有一个“Employees”表,然后是各种子类表 - 例如“Accountants”,“Programmers”和“Lawyers”。每个员工都有一个且只有一个子类,所有子类都是员工。

对于任何给定的employee_id,我希望能够显示该记录的所有属性,包括特定于员工子类的属性。加入所有子类表(如文章所示)是最有效的方法吗?即使我有可能有数百个子类表和/或大量父记录吗?

我能想到的另一个选择是在我的“Employees”表中创建一个“subclass_type”列。这样,我可以在适当的子类表上执行直接查找。这可能比加入许多单独的表更快吗?

1 个答案:

答案 0 :(得分:0)

富,

我相信在你的情况下,我会遵循你的另类建议,或者压平成一张桌子。

关于你的替代建议:employees得到,例如,subclass_type和subclass_id(每个都禁止NULL),而accountants等没有其他外键。

关于展平:如果子类的数量非常少,您可以考虑employees上的字段,如accountant_cpa_idlawyer_independent_practice(布尔值)。您可能在应用程序层中验证,对于任何给定的行,只应填充一个子类“employees字段”。我建议不要使用这种策略来反对subclass_type字段,因为它提供了非规范化的头痛而没有相应的收益。

希望这有帮助!