2011-08-01 12 views
5

En términos de rendimiento y escalabilidad, uno sería un mejor método para realizar una a varias asignaciones en MySQL.¿Debería haber una tabla separada al mapear una relación entre muchas?

  • Usando una columna separada pero si se sigue a 2 tablas:

    (persona): id, nombre

    (teléfono): Identificación, número, tipo, person_id

  • El uso de un tabla separada:

    (persona): id, nombre

    (phon e): Identificación, número, tipo

    (person_phone): Identificación, person_id, phone_id

+1

¿Bajo qué circunstancias imagina que hacer dos uniones para obtener los datos que necesita será más rápido que hacer una sola unión? – R0MANARMY

+0

Mencioné el rendimiento y la escalabilidad. Me preguntaba si tener una mesa separada lo haría más escalable. – Shoaibi

+0

@Dan: ¿Puede estar rompiendo el esquema en varios servidores de bases de datos? [Los niveles de advertencia de cafeína se alcanzaron hace mucho tiempo, por lo que este podría no ser el mejor argumento] – Shoaibi

Respuesta

11

Sólo hay una respuesta correcta a esta, y es la primera.

La segunda de tus ideas es cómo modelas las relaciones de muchos a muchos, no uno a muchos.

+1

el segundo implica que diferentes personas pueden compartir el mismo número de teléfono, que es BS – Bohemian

+7

¿Es "BS"? Huh, mi esposa y yo hemos compartido el mismo teléfono por años. –

+1

Es solo un ejemplo, chicos. Su verdadera pregunta es "cuando mapea una a muchas relaciones". Mantenga la calma :) –

5

En términos de rendimiento, siempre es más barato evitar combinaciones, que añaden multiplicidad a la cantidad de filas que se consultarán.

Mientras un solo teléfono sea utilizado por un solo empleado (un verdadero uno-a-muchos), la primera opción es la mejor.

+0

Por supuesto, hay compensaciones en otras áreas con minimización de combinaciones. De lo contrario, todos simplemente usarían bases de datos de una sola tabla (lo cual no es tan ridículo como parece ... una vez tuvieron una cantidad considerable de seguidores). Pero estás en lo correcto al agregar 'JOIN's solo para agregarlos no hará ningún favor a tu actuación. –

5

Primero es mejor.

  1. Mejor rendimiento.
  2. Menos espacio de almacenamiento.
  3. Fácil de entender.

P. S. Tal vez incluso no necesita id para el teléfono, (number, type, person_id) es suficiente.

+0

Lástima que solo puedo votar una vez, necesito un voto aparte para P.S. :) – Shoaibi

Cuestiones relacionadas