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

Qué diseño escoger para una base de datos

Estas en el tema de Qué diseño escoger para una base de datos en el foro de Bases de Datos General en Foros del Web. Os voy a explicar el tema (muy resumidamente), y a dar las 3 opciones que he pensado, para que me digáis cuál creéis mejor. Tengo ...
  #1 (permalink)  
Antiguo 31/03/2005, 19:41
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 3 meses
Puntos: 6
Qué diseño escoger para una base de datos

Os voy a explicar el tema (muy resumidamente), y a dar las 3 opciones que he pensado, para que me digáis cuál creéis mejor.

Tengo unos elementos de inventario, que van a ser de distinto tipo, con lo cual, haré una tabla para cada uno de ellos por sus características específicas. Además, puedo hacer una tabla que los englobe a todos, con características comunes que puedan tener.

Además, dichos elementos han de estar en un lugar, y el lugar se tomará de una tabla de lugares.

Pues bien, posibilidades de diseño:

1) Diseño 1

Creo una tabla llamada Inventario, con un campo llamado Id como clave primaria, con una serie de campos secundarios que son los atributos comunes, y después una serie de tablas de tipos de elemento de inventario independientes, que tienen una clave foránea: su clave primaria la toman de la clave primaria de Inventario.

Luego, para relacionarlo con los lugares, es tan sencillo como poner los lugares en la tabla genérica llamada Inventario, como un campo secundario más (que será clave foránea de la tabla Lugares).

2) Diseño 2:

No creo una tabla genérica llamada inventario, sino que directamente creo las tablas de los tipos de elementos, cada una con su propia clave primaria, que será un campo id autonumérico.

Creo una tabla llamada "nombres", donde pongo los nombres de las tablas que conformarán el inventario.

Para poner los lugares, dos modos:

2.1) Meter los lugares dentro de cada tabla, como un atributo más.

2.2) Como el método anterior puede enlentecer la lectura en el sistema (y en este sistema prima la lectura sobre la escritura), ya que para buscar los elementos de una estación hay que ir abriendo y recorriendo todas las tablas definidas como inventario, se puede crear una tabla en la que se relacionen a los elementos de inventario con los lugares donde están.

Problema:

Cada tipo de elemento tiene su propia id, que es un número, pudiendo repetirse. Por ello, la clave primaria en esa tabla que los relaciona con la tabla "lugares", ha de estar compuesta por dos campos, uno que indique el nombre de la tabla en la cual están, y otro en el que se indique la posición dentro de esa tabla (el id).

Para hacer esto, aquí pido consejo o ayuda: si yo pongo para indicar como parte de la clave primaria, el nombre de la tabla en la cual está, ¿cómo referencio a ella? No puedo crear clave foránea con ello, ¿o sí? (sería practiquísimo en este caso).

__________________________________________________ ___
¿Qué diseño me recomendáis? A mí el 1 me gusta bastante, al 2.1 creo que le falla la rapidez en la lectura, y el 2.3 tiene el problema de referenciar al nombre de una tabla, siendo por tanto el 1 parecido al 2.3 pero "mejorado". La pega del 1, es que al meter elementos, hay que meterlos primero en la tabla Inventario, y después coger esa id que dejen para insertarlo en la tabla que corresponda (y dejaría a una serie de tablas con sus campos id "salteados", pudiendo ir del 1 al 15, después el 16, 17 y después el 32, lo cual tampoco me parece un gran problema).

Opinad (por si importa, que no creo, estoy con el SQL Server 2000).

Última edición por un_tio; 31/03/2005 a las 19:43
  #2 (permalink)  
Antiguo 31/03/2005, 19:50
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 3 meses
Puntos: 6
Por ponerlo gráficamente:

Cita:
Diseño 1:

Inventario
Id (clave primaria)
Lugar

Elemento 1
Id (clave foránea)

Elemento 2
Id (clave foránea)
Cita:
Diseño 2.1:

Elemento 1
Id (clave primaria)
Lugar

Elemento 2
Id (clave primaria)
Lugar
Cita:
Diseño 2.2:

Relación_elemento_lugar
Id (clave primaria compuesta)
Nombre_tabla (clave primaria compuesta)
Lugar

Elemento 1
Id (clave primaria)

Elemento 2
Id (clave primaria)
Nota: En el diseño 2.2., la Id y el Nombre_tabla conformarían la clave primaria. Como se ve, el problema es que Nombre_tabla no puede referenciarse a nada, y el sistema no puede por tanto hacer comprobación de errores. Si se pudiera, sería perfecto, pues éste es el modelo que más me gusta.
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 18:30.