2012-08-08 13 views
10

Estoy diseñando una estructura de base de datos con el siguiente ejemplo simplificado:¿Es malo tener "redundancia de clave externa" en una base de datos?

Team has many members 
Member has many clients 
Client has many projects 

Suponiendo mis objetos tienen estos parámetros:

Team: id, type 
Member: id, team_id, name 
Client: id, member_id, email 
Project: id, client_id 

Es bastante simple de encontrar el cliente de un proyecto, o miembro de un cliente, o el equipo de un miembro.

Sin embargo, supongamos que quiero encontrar el equipo de un proyecto, por ejemplo, primero tengo que encontrar el cliente de un proyecto, luego un miembro del cliente y luego el equipo del miembro.

que podría añadir un team_id directamente al proyecto, así:

Project: id, client_id, team_id 

Me di cuenta, sin embargo, esto se suma un cierto nivel de redundancia, ya que la información es a disposición por "subir el árbol de relaciones " ¿Es una mala idea?

Gracias!

+0

¿No quiere decir "cada miembro del equipo tiene muchos clientes" y "el cliente de cada miembro del equipo tiene muchos proyectos"? –

+0

¿Qué considera "redundancia perjudicial"? ¿Estás hablando del mismo tipo de "redudancia dañina" que trata la teoría de la normalización? ¿O su medida de lo que es "dañino" es una medida diferente? –

Respuesta

2

Si esta es una mala idea o no, depende de los casos de uso típicos para la base de datos.

Agregar claves foráneas adicionales aumenta el costo de modificar la estructura (INSERTAR, ACTUALIZAR si modifica las relaciones, ELIMINAR).

No tener las claves externas adicionales aumenta el costo de las consultas que de otro modo se beneficiarían de su presencia.

Si la estructura del proyecto no cambia mucho pero consulta la estructura con frecuencia, es probable que la clave externa adicional sea positiva neta. En caso de duda, cree la estructura con datos de prueba razonables y compare algunas consultas que considere típicas.

+0

No tiene que agregar FK. Simplemente puede hacer el compuesto FKs. –

+0

Aún así, mientras más grandes sean las claves que administre, más lentas serán las actualizaciones. Incluso si tiene una clave más amplia, aún tendrá menos teclas en la página del disco y podrá almacenar menos claves en la memoria RAM disponible. –

1

No es que tenga que hacer 4 consultas aquí. Usted acaba de hacer una unión que une todas las tablas en una sola consulta. Esto no agrega mucha complejidad, pero agrega un poco. Yo solo iría con lo que tienes.

Cuestiones relacionadas