Ver Mensaje Individual
  #6 (permalink)  
Antiguo 10/07/2010, 10:16
enridp
 
Fecha de Ingreso: mayo-2005
Mensajes: 284
Antigüedad: 19 años
Puntos: 11
Respuesta: Herencia de Tablas? (Que se recomienda para tablas similares?)

Cita:
Iniciado por gnzsoloyo
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.
Si habia pensado en algo asi tambien pero se me ocurrió que ese modelo funcionaria bien para empresas "organizadas" como tal, muchas veces tengo comercios que son emppresas familiares o pymes muy chicas donde tienen 2 locales y a lo mejor no lo distinguen como Empresa y Sucursal...
Se me ocurrió que asi sería mas general, pero creo que tenes razon de ultima que elijan a alguno como Empresa y listo supongo.
Podrias mostrarme mejor como lo plantearias? armarias dos entidades? una Empresa y la otra Sucursal con los mismos atributos en cada una?
Porque en principio no se me ocurre que atributo diferencia a una casa central de una sucursal.

Cita:
Iniciado por gnzsoloyo
- 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...
Eso tambien lo hice por miedo a "quedarme corto". Se me ocurrió por ej. que un comercio podría tener mas de una dirección (tal vez si se puede acceder desde dos calles por ej. los supermercados con estacionamiento atras, o por ahi alguien que quiere aclarar que la direccion para hacer una consulta u otro tramite es en otro lado, o alguien que quiere poner una direccion alternativa, por ej. un profesional, no se).
Por otro lado, la direccion me quedaba con MUCHOS atributos como pudiste ver, y meterlos en la tabla "Comercios" a todos esos atributos me parecia una exageracion.
Lo estaré planteando mal?


Cita:
Iniciado por gnzsoloyo
- 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 .
Esto la verdad que me tuvo varias horas hasta que llegue a esa solucion horrible ya se :(
Esto fue lo que me imaginé:
El usuario (comerciante) entra, registra su comercio y cuando se le pide la direccion, le voy a mostrar las calles en una lista asi no escribe cualquier cosa.
Pero hay mucha gente que no pone Calle y Nro, sino que pone la interseccion, y hay mucha gente que pone las dos versiones, y otros que incluso ponen San Martin 123 (casi Alvear), esta situacion la contemple agregandole un campo "descripcion" a la tabla Direcciones (para que puedan poner mas texto, por ej: "es la puerta roja", "casi peatonal", etc.)
Pero como hago para permitir que pongan la Calle y el Numero y/o las dos calles?
Inicialmente se me habia ocurrido poner DENTRO de direcciones estos campos:
Calle1
Numero1
Calle2
Pero corria riesgo de que calle2 (o Numero1) me quede vacio muchas veces.
Podrias explicarme como fusionar los datos? yo no pude hacerlo :(


Cita:
Iniciado por gnzsoloyo
- 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.
Si yo tambien soy de Argentina, San Martin es infaltable ^_^
Yo lo pense al atributo que ppuse en la tabla Calles como: "Esta calle pertenece a la Localidad X"
Porque aunque San Martin esta en muchos lados, en algunos es Bvd, en otros Av. en otros solo calle.
Y aunque este en varias localidades, me interesaba que este repetido el nombre y distinguido con la Localidad. Mi objetivo es que el usuario elija su Localidad y en una lista le aparezcan TODAS las calles de esa localidad.
Está mal igual?



Cita:
Iniciado por gnzsoloyo
Respecto al asunto de las herencias, te recomiendo ver algunos modelos que las manejan, para ver cómo se implementan:
Bueno esos estan mas completos que los que encontré. Pero mi duda no es en el diagrama, sino en la implementacion. Por lo que puedo verr en esos diagramas, y lo que encontre en internet (de hecho habia una respuesta tuya en este mismo foro sobre el tema ^_^), MySQL no soporta herencia (asique en el MySQL workbench tampoco hay como dibujarla), pero se implemente con claves foraneas como una relacion uno a uno y listo no?