Да, у этого метода есть недостаток. Объединения увеличивают сложность запроса (в некоторых случаях очень сильно) и могут увеличить время запроса, если вы не будете осторожны.
Вместо этого стандартный способ сделать это (то есть имитировать наследование объекта, когда между подклассами различаются только несколько атрибутов) - это сделать что-то под названием Наследование одной таблицы . Этот метод предотвращает объединение базы данных за счет небольшого неиспользуемого пространства базы данных.
Это работает так: вы создаете одну таблицу, которая содержит все атрибуты, в том числе атрибуты, которые применяются только к одному или другому, а также атрибут type
для указания типа объекта. Например, если customer
имеет атрибуты:
id
, name
, email
, password
, order_date
AND staff
имеет атрибуты:
id
, name
, email
, password
, hire_date
Затем вы создаете одну таблицу со столбцами для всех атрибутов и типа:
id
, type
, name
, email
, password
, order_date
, hire_date
В столбце type
всегда указывается либо «клиент», либо «персонал». Если type
является «клиентом», то hire_date
всегда равно NULL и не имеет смысла. Если type
означает «персонал», то order_date
всегда равно NULL и не имеет смысла.