Bueno, analizando el modelo que propones:
hay algunas observaciones...
- Si tienes diferentes comercios que poseen sucursales y casa central, lo que tienes, en realidad es Dos entidades diferentes: Empresa, que contiene la información de la casa matriz y sus datos generales, y Sucursal, que contiene los atributos propios de ellas. Esa distinción puede que no la hayas visto porque estás planteando el modelo como una cadena de comercios, todos los cuales son iguales en cuanto a atributos por lo que lo único que los distingue es que hay al menos uno que no figura como sucursal en la tabla Comercios_has_comercio.
Pero lo que puede que no estés notando es que una cadena de comercios pertenecientes a la misma firma permite inferir la existencia de una entidad superior que contenga atributos que no son iguales a los de las sucursales, y que definen su existencia como firma comercial. Por ello estos casos se modelan con esas dos tablas mencionadas.
- Por otro lado, estás poniendo la dirección como una tabla relacionada, cosa que sólo tiene sentido si la vigencia de una dirección para una sucursal puede variar en el tiempo, de lo contrario, los atributos de esa tabla pertenecen en realidad a la tabla Sucursal,
porque serían atributos propios de la instancia de Sucursal. Técnicamente, desde el punto de vista impositivo en mi país, cuando trasladas una sucursal a una distancia mayor a 500 metros (5 cuadras), se considera que estás abriendo una nueva, por lo que en esos casos hay que crear una intsancia diferente y por consecuencia los atributos de dirección no varían con el tiempo...
Como verás, depende de la realidad que estás modelando.
- Además de esto último, estás separando direcciones con calle y número de direcciones dadas por calle y calle (intersecciones o encuadramientos),
y eso es una distinción irrelevante, porque toda dirección puede cumplir con ambas situaciones. No es necesario atomizar de esa forma los datos porque estás complicando demasiado la búsqueda y las consultas.
De hecho, es habitual que las direcciones en las bases de datos se almacenen con ambas cosas, para dar mayor certeza en la localización, así pues, deberías fusionar esos datos en la misma tabla .
- Una cosa que sí es un
error manifiesto es poner a la localidad como atributo de una calle. Eso es irreal porque puede darse que una calle aparezca con los mismos números y mismas intersecciones en varias ciudades de un mismo país. Eso no lo puedes descartar.
En el caso de mi país, por ejemplo, Avenida Gral. San Martín, es una denominación de calle que aparece en casi todas las ciudades... por lo que no es discriminante de la ciudad. La ciudad o localidad es en realidad un atributo
de la dirección, no de la calle.
Respecto al asunto de las herencias, te recomiendo ver algunos modelos que las manejan, para ver cómo se implementan: