Sugiera la mejor manera de diseñar mi base de datos

Tengo una mesa llamada Pages y una mesa llamada Categories. Cada entrada de la mesa Pages está vinculado a la mesa Categories. El Categories La tabla tiene 5 entradas, son: Car, Websites, Technology, Mobile Phones, Interest.

Así que cada vez que pongo una entrada al Pages tabla, necesito mapearla a la Categories mesa de modo que estén dispuestas correctamente.

Aquí está mi mesa:

Páginas disponibles

id [PK]
name
url

Categorías

id [PK]
Categoryname

Pages2Categories

Pages.id
Categories.id

Entonces, mi pregunta es, ¿es esta la forma más eficiente de crear este tipo de relaciones entre tablas? Parece muy amateur

preguntado el 09 de enero de 11 a las 08:01

3 Respuestas

Si cada página debe tener exactamente 1 categoría, coloque el ID de la categoría en las páginas de la tabla.

Si cada página tiene opcionalmente una categoría y la mayoría de las páginas no tiene una, coloque (page_id, category_id) en una tabla separada con la clave principal (page_id)

Si cada página puede tener varias categorías, utilice el enfoque que sugirió.

No se preocupe por el espacio o el rendimiento en este momento.

Respondido el 09 de enero de 11 a las 11:01

Ronnis, ¿debería poner el categoryID en la tabla Pages como clave principal? - Rho

@Raymond, ¿Page_id sería la clave principal en Pages? [Pages.CategoryID] debe ser una clave externa para [Categories.ID]. - Ronnis

Dado que la "categoría" es un atributo de una "página", es mejor mantener ese atributo en la tabla "páginas". Para ahorrar espacio, puede usar un tipo de datos entero / numérico para la columna ¨category¨. por ejemplo, 1 = automóvil, 2 = sitios web, 3 = tecnología, etc.

Respondido el 09 de enero de 11 a las 11:01

Leí sobre la normalización de la base de datos y sugiere que al crear tablas, debemos evitar múltiples entradas de datos. Así que creé las tablas de categorías para poner todas las categorías allí y simplemente vincularlas .. - Rho

@Raymond Con el método de Viren, aún necesitaría otra tabla para asignar los números a un tipo de categoría; de lo contrario, deberá hacer esto en su código mediante el uso de una enumeración posiblemente, que no recomendaría. No estoy seguro de cuál de las dos opciones anteriores recomienda Viren, pero la respuesta de Ronnis resume bastante bien sus opciones. - Waleed Al-Balooshi

Una sugerencia: tenga 2 tablas: "páginas" y "categoría". Las columnas de las páginas son:

Nombre [varchar] URL [varchar] Categoría [tinyint]

Por categoría, como lo diseñó:

catID [1 | 2 | 4 | 8 | 16] (5 valores posibles para 5 categorías) catName [varchar]

Supongo que tiene una pequeña cantidad de categorías (<8), si este recuento llega a 31, use un número entero en su lugar (usando 4 en lugar de 1 byte por fila). Ahora, la categoría en la tabla de páginas no necesita ser un FK para la otra tabla. Puede hacer un O lógico para insertar / actualizar y Y para seleccionar en su código jdbc si una URL pertenece a más de 1 categoría. Puede que no sea el mejor diseño de base de datos, pero esto debería minimizar el espacio de base de datos que consume, en caso de que tenga que guardar millones de páginas. Desde su declaración de problema, no veo por qué necesita un PK en la tabla ... elimínelo para ahorrar algunos bytes más en cada fila. Saludos, - MS

Respondido el 19 de enero de 11 a las 05:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.