una tablas tabla servidores registros otra mostrar diferentes datos crear copiar mysql performance database-design members

tablas - crear tabla en php mysql



Diseño de BD: ¿tabla de miembros separada o todo en una tabla? (3)

Depende mucho de esos "otros" detalles. Esta es una pregunta común e interesante, y no hay una respuesta "difícil y rápida" a primera vista. Pero si pensamos en el tema de manera más abstracta, sobre la relación real entre los atributos ("detalles") de cualquier cosa en particular que desee representar, podemos encontrar algo de claridad.

En su pregunta, afirma que los amigos tienen detalles "mínimos" y "otros". En lugar de clasificar estos detalles como "mínimo" u "otro", vamos a clasificarlos según si un detalle individual ("atómico") puede determinarse por completo o por lo que hace único a un amigo.

Supongo que hay alguna clave principal (PK), como FriendID o dirección de correo electrónico o algo así. Teniendo en cuenta este identificador único, pregúntese: "Si me dan exactamente un FriendID (o un correo electrónico o lo que sea que esté usando como PK) ¿de qué detalles de ese amigo estoy absolutamente seguro? Por ejemplo, dado FriendID = 2112, estoy absolutamente seguro. Conozco el nombre, apellido y fecha de nacimiento de ese amigo, pero no conozco el número de teléfono de ese amigo porque hay más de uno.

Agrupe en una tabla todos los detalles que sin dudas conoce dado el PK. Ponga los detalles para los cuales necesita más datos (como "hogar" o "trabajo" en el caso de los números de teléfono) en las tablas "secundarias", con clave externa de regreso a la tabla "principal" en el PK. (Nota: es muy probable que el PK de la tabla hija sea compuesto, es decir, compuesto por PK de la tabla principal y el factor diferenciador (como "home" o "work" en este ejemplo). Teclas compuestas para muchos lados de las relaciones 1-M son muy buenas).

Los geeks de bases de datos llaman a esta descomposición en función de las dependencias funcionales .

Quiero crear una tabla de amigos con información personal e iniciar sesión en los detalles.

Qué mejor que separar la tabla de miembros en 2 tablas, una contiene detalles mínimos, la segunda con Otros detalles.

o permanecer en una mesa?

Tengo muchas tablas que contienen la clave externa del miembro.


Sin dudas: siempre divida las tablas cuando tenga sentido lógicamente.

Ejemplo: Amigo 1: Tom Jones vive en The Valley Friend 2: Erin Jones también vive, ya que es su hermano

mesas :

Friends Id Name Address 1 Tom Jones 1 2 Erin Jones 1 Adresses Id Address 1 The valley

De lo contrario, las cosas siempre aparecerán como:

Friends Id Name Address 1 Tom Jones The Valey 2 Erin Jones The Valley

Lo cual dará lugar a consultas erróneas.

Ese es solo un problema, hay numerosos. ¿Cómo puede ser que tenga 2 direcciones de correo electrónico y 3 números de teléfono celular? ¿Qué pasa si un nombre de calle cambia y 5 amigos viven en él?

Si está seguro de que su mesa será pequeña y no tiene que consultarla, entonces podría usar solo una tabla. Pero de lo que puedes simplemente usar algunos excelentes como sw también, o un pedazo de papel para ese asunto :-)

Pero si quiere tener una base de datos, trátela como tal.

Lea acerca de la normalización para todo el tema.


Una tabla, a menos que sea necesario asociar un miembro a múltiples conjuntos de detalles (es decir, varias direcciones de correo electrónico, grupos de usuarios, teléfono diurno, teléfono nocturno, teléfono celular, etc.).