我正在尝试在MySQL中实现子类模式,如下所述:
http://www.tomjewett.com/dbdesign/dbdesign.php?page=subclass.php
根据上面的文章,没有必要为父表提供外键。 (“请注意,父表中没有属性告诉我们学生是TA,RA还是两者 - 两个外部联接查询的并集将生成一个包含我们需要的所有信息的表”)< / p>
这真的是最好的模式吗?
在我的项目中,我正在尝试为父表中的记录实现完整的,不相交的特化。例如,我有一个“Employees”表,然后是各种子类表 - 例如“Accountants”,“Programmers”和“Lawyers”。每个员工都有一个且只有一个子类,所有子类都是员工。
对于任何给定的employee_id,我希望能够显示该记录的所有属性,包括特定于员工子类的属性。加入所有子类表(如文章所示)是最有效的方法吗?即使我有可能有数百个子类表和/或大量父记录吗?
我能想到的另一个选择是在我的“Employees”表中创建一个“subclass_type”列。这样,我可以在适当的子类表上执行直接查找。这可能比加入许多单独的表更快吗?
答案 0 :(得分:0)
富,
我相信在你的情况下,我会遵循你的另类建议,或者压平成一张桌子。
关于你的替代建议:employees
得到,例如,subclass_type和subclass_id(每个都禁止NULL),而accountants
等没有其他外键。
关于展平:如果子类的数量非常少,您可以考虑employees
上的字段,如accountant_cpa_id
和lawyer_independent_practice
(布尔值)。您可能在应用程序层中验证,对于任何给定的行,只应填充一个子类“employees
字段”。我建议不要使用这种策略来反对subclass_type
字段,因为它提供了非规范化的头痛而没有相应的收益。
希望这有帮助!