Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

base de datos con relacion de especialización

Estas en el tema de base de datos con relacion de especialización en el foro de Mysql en Foros del Web. Hola a todos, y gracias por interesaros por mi pregunta, que es la siguiente. En mi proyecto de fin de carrera una de las bases ...
  #1 (permalink)  
Antiguo 02/12/2008, 04:41
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 0
base de datos con relacion de especialización

Hola a todos, y gracias por interesaros por mi pregunta, que es la siguiente.

En mi proyecto de fin de carrera una de las bases de datos que utilizo es una base de datos con una relación de especializacion. Para explicar el caso concreto os voy a mostrar el diagrama entidad-relación, y luego el modelo relacional.

Patrimonio
|
--------------------------------------------------------------------
| | |
Excavaciones Edificios Objetos
|
---------------------------------------
| | |
Arq.Religiosa Arq.Civil Elementos menores

El patrimonio se divide en: Excavaciones, Edificios y Objetos
Y edificios a su vez de divide en: Arq.Religiosa, Arq.Civil, Elementos menores

y el relacional es

Excavaciones
Cod_Patri Nombre Periodo Municipio tipo_excavacion y una Clave externa

Arq.Religiosa
Cod_Patri Nombre Periodo Municipio tipo_arqreligiosa y una Clave externa

Arq.Civil
Cod_Patri Nombre Periodo Municipio tipo_arqcivil y una Clave externa

Elementos menores
Cod_Patri Nombre Periodo Municipio tipo_elementomenor y una Clave externa

Objetos
Cod_Patri Nombre Periodo Municipio tipo_objetos y una Clave externa

Donde clave externa es una clave externa a otra tabla que no he puesto.

La cuestión es la siguiente. Lo que yo pretendo es que el cod_patri(que es auto_increment) sea la clave de todas las tablas, es decir que si arq.religiosa tiene cod_patri=1 cuando se inserte el primer elemento de excavaciones cod_patri sea 2, y no 1.

Creo que me explicado más o menos bien. Me gustaría que me dijerais si es posible indicar eso en el phpmyadmin ya que estoy trabajando con xampp. Intento que la solución no sea modificar la base de datos, ya que la aplicación está prácticamente terminada.

Muchas gracias a todo aquel que se haya interesado. Un saludo
  #2 (permalink)  
Antiguo 02/12/2008, 08:00
 
Fecha de Ingreso: junio-2004
Mensajes: 266
Antigüedad: 19 años, 9 meses
Puntos: 8
Respuesta: base de datos con relacion de especialización

O no me he enterado o:

"Lo que yo pretendo es que el cod_patri(que es auto_increment) sea la clave de todas las tablas"

eso no tiene mucho sentido.
__________________
WebSenior
  #3 (permalink)  
Antiguo 02/12/2008, 08:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: base de datos con relacion de especialización

Es decir que el auto incremental sea para todas las tablas....

Creo que automaicamante eso no se puede hacer, podrias simularlo consultando el id siguiente de la tabla de referencia, usarlo y luego modificar el de la tabla de referencia de manera que se salte uno ...

Es decir si tengo

Tabla1
id PK autoinc
...


Tabla2
id Pk (no auto inc)
...

Tabla1
1
2
3
se que el proximo será 4

luego puedo usar 4 en la tabla2 (que no tiene auto inc) y modificar el valor de proximo autoinc (metadato) de tabla1 para que sea 5 (si no te asignará 4).

Tambien podrias mantener los auto inc de todas las tablas y cada vez que insertas un dato en una tabla hacer que el metadato autoinc (siguiente auto inc) sea el mismo para todas las tablas de manera que el proximo registro que entres sea en la tabla que sea obtenga el auto inc siguiente al ultimo registro entrado ...

Si buscas por el foro encotraras las consultas para conocer el proximo autoinc de una tabla, con un update puedes modificar lo...

Pero para que quieres eso, si es para listar quizas seria mejor guardar en un timestamp el momento en que se ha insertado el registro y luego listar por orden de inserción....

Quim
  #4 (permalink)  
Antiguo 02/12/2008, 08:54
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: base de datos con relacion de especialización

Hola
El problema esta en que necesitas primeramente normalizar tus datos.

Todas las tablas tienen la misma estructura a excepción de tipo de excavación , asi que ese campo puede quedar como clave externa y separarlo a otra tabla.

Las tablas que puedes tener es
Patrimonio y tipo de patrominio


Es preferible gastar tiempo en entender la raíz del problema a empezar a tirar soluciones que a la larga complicaran el desarrollo

Saludos
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #5 (permalink)  
Antiguo 02/12/2008, 10:00
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: base de datos con relacion de especialización

Antes de nada agradeceros vuestro interés en ayudarme.

Respecto al diseño considero que es completamente válido, el problema aparece debido a lo siguiente:

Recordar que se trata un modelo de base de datos que utiliza relaciones de generalización/especialización.

El concepto Patrimonio se divide en tres subclases que son excavaciones, edificios y objetos. Todas las entidades tienen los mismos atributos salvo uno, aquel que hace referencia al tipo de entidad (en el caso de excavaciones, tipo_excavacion, en el caso de objetos tipo_objeto, y en el de edificio tipo_edificio). Además el atributo tipo_edificio implica una nueva división esta vez con edificio como clase y arquitectura religiosa. arquitectura civil, y elementos menores como subclases.

En ambos casos las relaciones de especialización presentan dos restricciones. La primera es la restricción dedesunión, la cual especifica que las subclases de la especialización deben estar separadas. Esto significa que una ocurrencia de la entidad puede ser miembro de como máximo una de las subclases de la especialización. Es decir, que una ocurrencia de patrimonio sólo puede existir o en excavaciones o en edificios o en objetos. La segunda restricción a la especialización se llama la restricción de totalidad, la cual puede ser
parcial o total. Una restricción de especialización total especifica que cada ocurrencia de entidad de la superclase debe ser miembro de alguna subclase de la especialización, es decir que cualquier ocurrencia de patrimonio debe aparecer en alguna de sus 3 subclases.

Esta chapa viene por lo siguiente. Con estas características la mejor opción para transformar nuestro diagrama entidad relacion a relacional es la siguiente:

Crear para cada subclase una relación con los atributos de la superclase mas los
atributos propios, donde la clave primaria será la de la superclase. Esta opción sólo es válida para las especializaciones con restricción de totalidad y desunión.

Siguiendo esta regla el resultado es el que os ponía en el primer mensaje:

Excavaciones
Cod_Patri Nombre Periodo Municipio tipo_excavacion y una Clave externa

Arq.Religiosa
Cod_Patri Nombre Periodo Municipio tipo_arqreligiosa y una Clave externa

Arq.Civil
Cod_Patri Nombre Periodo Municipio tipo_arqcivil y una Clave externa

Elementos menores
Cod_Patri Nombre Periodo Municipio tipo_elementomenor y una Clave externa

Objetos
Cod_Patri Nombre Periodo Municipio tipo_objetos y una Clave externa


El problema es que no se como indicar a mi base de datos que estas tablas forman una relación de especialización, y que por tanto comparten "clave primaria".

Sé que existen otras opciones que me resultarían más fáciles para evitar este problema sin embargo debería corregir algunas otras, y replanificar mi diseño que no me apetece mucho, jeje.

Un saludo, y muchas gracias a todos de verdad, sólo con el interés que poneis me vale.
  #6 (permalink)  
Antiguo 03/12/2008, 01:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: base de datos con relacion de especialización

Una cosa és el modelo teorico (relacional) y otra su implementación.

Yo apesar de que la segunda opción que te daba creo que es factible estaria con Genetix puesto que una cosa se pueda hacer no quiere decir que sea tenga que hacer....

Podrias tener una estructura muy similar a la que buscas si usas la que te ha propuesto Genetix y creas vistas que muestren los datos de cada especialización por separado. Y el modelo resultante estaria totalmente normalizado.

Quim
  #7 (permalink)  
Antiguo 03/12/2008, 05:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: base de datos con relacion de especialización

En esencia el problema que tienes es lo que dice quimf: Estás confundiendo el modelo de clases y el modelo lógico, con el modelo físico de datos. Son cosas distintas. Tal vez no lo veas ahora, pero es así.

Las agregaciones, composiciones y las cardinalidades en las relaciones son las que en el modelo físico se resuelven con la construcción de tablas.
En el caso específico tuyo, una jerarquía, te recomiendo que eches una mirada a este documento en la web, especialmente en la página 11, ya que allí se muestra cómo se transforma una jerarquía en una estructura física de tablas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:33.