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

Duda de diseño para tablas donde hay "superclase" y "subclases"

Estas en el tema de Duda de diseño para tablas donde hay "superclase" y "subclases" en el foro de Bases de Datos General en Foros del Web. Tengo ya claro como hacerlo, y es de una de dos formas; os las voy a explicar y me decís cuál creéis que es mejor. ...
  #1 (permalink)  
Antiguo 13/03/2005, 21:12
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
Duda de diseño para tablas donde hay "superclase" y "subclases"

Tengo ya claro como hacerlo, y es de una de dos formas; os las voy a explicar y me decís cuál creéis que es mejor.

Os explico la situación:

Tengo diversas tablas de elementos concretos de inventario (por si alguien se lo pregunta, no están todos en la misma tabla, pues cada uno es especial y tiene dispar número de campos), por un lado, y una tabla en la que se unen dichos elementos a otro campo, por el otro. Entonces, qué me recomendáis:

a) Que esas diversas tablas de elementos tengan su propio campo de id. Después, en la 2ª tabla donde van a parar todos los elementos que van a ser unidos con el otro campo, se utilizará la id de la tabla de origen más el propio nombre de la tabla de origen, como dos campos que conformarán la clave primaria, para identificarlos.

Esquema (con sólo dos tipos de elementos, pero serían más):

Código:
Elemento 1 Elemento 2     
id-campos                 id-campos                    


Tabla común

id----nombre_tabla-----campo
b) Que en la 2ª tabla inserte primero los elementos, con una id única para todos, juntándolos con el otro campo. Y que "después", las tablas de los elementos "extraigan" de esa tabla su id.

Esquema (con sólo dos tipos de elementos):

Código:
Elemento 1 Elemento 2     
id (clave foránea)-campos     id(clave foránea)-campos                    


Tabla común

id----campo
Saludos

Nota: la tabla única sería la superclase, y las tablas concretas de elementos las subclases.
  #2 (permalink)  
Antiguo 14/03/2005, 06:24
 
Fecha de Ingreso: febrero-2005
Mensajes: 396
Antigüedad: 19 años, 10 meses
Puntos: 1
Yo me decantaría por el primer estilo, aunque en vez de introducir en la tabla "super" el nombre de la tabla hijo, quizas elegiria algun tipo de "identificador" que permitiese saber que tipo de hijo tienes. Asi ahorras espacio al no tener que almacenar el nombre de la tabla muchas veces.

La segunda aproximacion no me gusta tanto porque para saber de que tipo es cada elemento tendrias que hacer varias consultas a las distitnas tablas hijas para saber si alli está o no el elemento que deseas, lo cual puede ser costoso en tiempo y en esfuerzo.

Un saludo

Zerjillo
  #3 (permalink)  
Antiguo 14/03/2005, 18:52
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
Pues sí. A mí también me gusta más la primera forma de hacerlo.
Cita:
Iniciado por Zerjillo
Yo me decantaría por el primer estilo, aunque en vez de introducir en la tabla "super" el nombre de la tabla hijo, quizas elegiria algun tipo de "identificador" que permitiese saber que tipo de hijo tienes. Asi ahorras espacio al no tener que almacenar el nombre de la tabla muchas veces.
No te he entendido bien, ¿podrías poner un ejemplo? Se me ocurre esto, que no sé si es lo que dices: poner un único campo de identificador en el que haya por ejemplo un número y una letra, para identificar la tabla y el elemento dentro de ella. Creo que tampoco se ahorra tanto, y se puede escribir en otro campo la tabla en la que se encuentra.

Saludos
  #4 (permalink)  
Antiguo 15/03/2005, 03:29
 
Fecha de Ingreso: febrero-2005
Mensajes: 396
Antigüedad: 19 años, 10 meses
Puntos: 1
Bueno, no se ahorra tanto dependiendo del numero de elementos que tengas en las tablas... si son millones de campos, si ahorrarias. Por ejemplo:

coches viviendas lechugas
---------- --------------- -----------------
id - color id - metros id - huerto


global
---------------------
id - nombreTabla - precio

Este seria el estilo "tipico" que tu presentas. Si en "nombreTabla" tienes que poner "coches" o "viviendas" o "lechugas" estarás usando, al menos 6 caracteres par aidentficar la tabla. Si tienes 2 millones de elementos, eso seria unos 12 megas de informacion al menos. Yo te proponia que hicieras algo asi como:

global
-----------------------
id - nombreTablaAbreviado - precio

Donde "nombreTablaAbreviado" puede valer "c", "v" o "l" dependiendo de si se trata de coches, viviendas o lechugas.

Un saludo

Zerjillo
  #5 (permalink)  
Antiguo 15/03/2005, 08:41
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
De acuerdo. Esa solución ya la había pensado yo, pero no pensaba que pudiera ahorrar mucho espacio; además trae ciertas dificultades que ahora comentaré.

Hay que tener en cuenta que en lo que estoy trabajando, he de dejar la posibilidad de que el usuario pueda ir creando más tablas. Luego, ¿qué abreviatura le pongo? Además, ¿Creo una tabla donde guarde la relación entre el nombre de la tabla y el nombre abreviado?

Resumiendo: ¿Entonces tendría que crear otra tabla donde guardara los nombres abreviados asociados a qué nombre de tabla van? Respecto a qué nombre abreviado ponerle, podría ser un número, una id.

Saludos

Última edición por un_tio; 15/03/2005 a las 08:43
  #6 (permalink)  
Antiguo 15/03/2005, 10:07
 
Fecha de Ingreso: febrero-2005
Mensajes: 396
Antigüedad: 19 años, 10 meses
Puntos: 1
Si el sistema va a ir creciendo, quizas efectivamente no merezca la pena complicarse con lo de las abreviaturas y directamente que se almacene el nombre de la tabla. En cualquier caso, si el sistema si va a ser muy grande, entonces si merecería la pena crear como tu dices, una tabla auxiliar que te identifique los codigos con los nombres de las tablas. El problema entonces es que la cosa gana complejidad y las consultas serán un poco más dificiles de crear y más costosas de ejecutar (relacionas más tablas).

Así, pues, la solución que tu proponias originariamente parece la mejor.

Un saludo

Zerjillo
  #7 (permalink)  
Antiguo 15/03/2005, 20:05
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
Vale, gracias, eso me parecía (que la solución que proponías de una tabla auxiliar, ya comentada en otro tópic, era buena en general, pero no en un caso como el mío en el que el sistema iba creciendo).

Saludos
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 00:35.