Justamente la jerarquia de herencia de Categoria es un claro ejemplo de donde no conviene usar joined-subclass (una tabla por clase) como estrategia de persistencia de herencia.
En este tipo de modelo todas las clases hijas (Turismo, Familiar, Deportivo, TodoTerreno) no agregan nada estructuralmente hablando (solamente difieren en comportamiento). Ustedes al adaptar una estrategia de persistencia joined-subclass terminan con:
Una tabla base con todos los atributos
Muchas tablas hijas con solamente un id
mysql> describe categoria;
+---------------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------------+-------------+------+-----+---------+----------------+
| categoria_id | int(11) | NO | PRI | NULL | auto_increment |
| categoria_nombre | varchar(30) | YES | | NULL | |
| empresa_categoriaAdmitida | int(11) | YES | MUL | NULL | |
+---------------------------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
mysql> describe categoria_familiar;
+--------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| categoria_id | int(11) | NO | PRI | NULL | |
+--------------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)
mysql> describe categoria_deportivo;
+--------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| categoria_id | int(11) | NO | PRI | NULL | |
+--------------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)
mysql> describe categoria_turismo;
+--------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| categoria_id | int(11) | NO | PRI | NULL | |
+--------------+---------+------+-----+---------
Estos tipos de modelos son ideales para usar una estrategia basada en una sola tabla y discriminators. Por que?
Primero hay que recordar que el joined-subclass es mas caro para el motor en cuestion del trabajo que tiene que realizar (tiene que hacer joins entre al menos dos tablas, cuando poco)
Si bien me ayuda a tener datos heterogeneos separados, en este caso todos las categorias son muy homegeneas entre si.
Ademas, por la forma que tiene el modelo, es posible que haya muy pocas instancias de categorias => tendremos muchas tablas con aproximadamente un solo registro.
Justamente la jerarquia de herencia de Categoria es un claro ejemplo de donde no conviene usar joined-subclass (una tabla por clase) como estrategia de persistencia de herencia.
En este tipo de modelo todas las clases hijas (Turismo, Familiar, Deportivo, TodoTerreno) no agregan nada estructuralmente hablando (solamente difieren en comportamiento). Ustedes al adaptar una estrategia de persistencia joined-subclass terminan con:
Estos tipos de modelos son ideales para usar una estrategia basada en una sola tabla y discriminators. Por que?