2010-01-05 20 views
6

Esta pregunta está dirigida a MySQL, ya que eso es lo que estoy usando, pero creo que es probablemente el mismo o similar para casi todas las implementaciones de bases de datos importantes.Entender las claves en bases de datos

¿Cómo funcionan las claves en una base de datos? Con esto quiero decir, cuando establece un campo para 'clave principal', 'clave única' o 'índice', ¿qué hacen cada uno de ellos y cuándo debo usar cada uno?

Ahora tengo una tabla que contiene algunos campos, uno de ellos es un GUID (menos el {y} a su alrededor). Establecí el campo GUID en la clave primaria y veo que creó un árbol binario. Por lo tanto, mejora el rendimiento de la búsqueda, pero ¿qué diferencia eso de otros tipos de claves?

Me doy cuenta de que esto puede no estar realmente relacionado con la programación (aunque está relacionado con el desarrollo) - No estaba seguro de dónde preguntar exactamente, pero SO es lo que más uso, así que lo preguntaré aquí. Migre según sea necesario

Respuesta

11

Probablemente haya cientos de referencias para este lugar en la web, por lo que un poco de Google lo ayudará a profundizar en la comprensión del diseño de DB. Dicho esto, la esencia básica es:

  • clave principal: un campo o combinación de campos que debe ser único para cada fila, y que está/están indexados para proporcionar una rápida consulta de una fila dada un valor de clave ; no puede contener NULL, y una tabla solo puede tener una clave principal. Generalmente indexado en un índice agrupado, lo que significa que los datos en la tabla se reordenan para coincidir con el orden del índice, un proceso que mejora en gran medida la recuperación de datos en serie. (Esta es la razón principal por la que una tabla solo puede tener una clave principal: el orden de los datos no puede coincidir con el orden de más de un índice)
  • clave única: igual que una clave principal, pero algunas plataformas DB pueden contener valores NULL siempre que no violen la restricción de exclusividad. (En otras palabras, si la clave única contiene una sola columna, solo puede haber una fila en la tabla con NULL en esa columna; si la clave contiene más de una columna, entonces la tabla solo puede contener filas con NULL en las columnas de modo que no haya una duplicación no única de valores NULL en las columnas de la clave). En otras plataformas (incluido MySQL), las restricciones únicas pueden contener múltiples valores NULL; la restricción de exclusividad solo se aplica a los valores no NULL de las columnas a las que se hace referencia. Puede haber más de uno de estos por mesa. Indexado en un índice no agrupado.
  • índice: un campo o combinación de campos que están indexados previamente para una recuperación más rápida dado un valor para el campo (s) en el índice. Una tabla puede tener más de un índice.
+0

gracias, un entendimiento básico era todo lo que realmente estaba buscando, solo quería asegurarme de estar tomando la decisión correcta (y puedo seguir tomando la decisión correcta) cuando agrego una clave a una tabla –

+0

Buena respuesta. FWIW, algunos RDBMS permiten múltiples NULL en columna (s) que tienen una restricción única. Y no cubriste claves extranjeras. –

+0

Bill, dado que me acabo de dar cuenta de que el OP estaba preguntando específicamente sobre MySQL (que es uno de los RDBMS que permite múltiples NULL con restricciones ÚNICAS), modificaré mi respuesta ... tienes razón. Pero el OP no preguntó por claves extranjeras ... – delfuego

0

En las claves básicas más básicas, se representa cómo los registros se almacenarán físicamente en la memoria/en el disco, usted querrá que el único campo que va a buscar sea esto, ya que reducirá en gran medida buscando.

Las claves únicas son campos que solo pueden contener valores únicos.

Un índice es un "mapa" especializado en el archivo de base de datos que las consultas pueden hacer referencia.

Estas son respuestas extremadamente simplificadas, pero creo que esa es la esencia de esto.

1

Cuando define una clave principal, la base de datos crea un índice basado en esa clave. Necesita ser único. En general, puede crear un índice que acelere el acceso a datos basados ​​en datos de consulta no únicos.El tiempo de recuperación indexado para datos con clave única debe ser mejor que para índices sin clave única, por lo que trato de usar índices únicos siempre que sea posible.

0

Una cosa más, cualquier tecla es esencialmente una tabla separada que está ordenada por el índice que apunta directamente a la (s) fila (s) que coinciden con la clave. Un índice de estilo BTree se almacena en un árbol equilibrado, un árbol equilibrado es una estructura de árbol donde viajar a la izquierda es más pequeño y viajar a la derecha es más grande.

5 
3 7 
2 4 6 8 

Sería un ejemplo de árbol equilibrado. El otro tipo principal es un Hash, donde una expresión matemática convierte la clave en la ubicación relativa de la memoria de la clave.

0

Para comprender realmente las claves, debe comprenderlas en tres niveles: conceptual, lógico y físico. Voy a revertir mi orden habitual y discutir primero lo físico.

La mayoría de los programadores tienden a pensar en el nivel físico. En el nivel físico, una clave es un sustituto (suplente) para la dirección de una fila. Cuando se debe hacer referencia a una fila, se puede usar una copia de la clave para especificar la fila. Cuando se hace una referencia a una fila en otra fila, la copia se conoce como una clave externa.

Los programadores más experimentados tienen un conocimiento profundo de los punteros y direcciones, y entenderían exactamente cómo funcionaba la estructura de datos si solo utilizara punteros y direcciones. Antes de que las bases de datos relacionales se volvieran dominantes, de hecho había bases de datos que usaban punteros a los registros incrustados en otros registros para unir los datos.

Una desventaja de utilizar claves en lugar de punteros es que el DBMS tiene que usar un índice para traducir una referencia de tecla a un puntero para recuperar la fila en cuestión. Una ventaja es que el nivel de indirección permite que el DBMS baraje todas las filas de una tabla para cualquier propósito, siempre que el DBMS actualice todos los índices relevantes en consecuencia.

Visto en este nivel, las claves también podrían ser simples, enteros y autoincrementadas. Funcionan más rápido que otros tipos de claves y evitan ciertos problemas de administración de datos que surgen cuando faltan los datos suministrados por el usuario o son inconsistentes. Sin embargo, eludir los problemas de administración de datos en este nivel puede crear un campo de minas en los dos niveles superiores.

En el nivel lógico, una clave es un subconjunto mínimo de los datos en una tupla (fila) que permite especificar una sola tupla coincidente, y cuando el DBMS recupera el contenedor para esa tupla, todos los atributos en el tupla ahora están disponibles. Cada relación tiene al menos una clave candidata. En el peor de los casos, la tupla completa es la única clave candidata. Cuando existen varias claves candidatas para una relación única (tabla), la práctica común es elegir una clave candidata como clave principal y hacer todas las referencias a través de esta clave primaria.

(En realidad, la relación y la tabla no son sinónimos, pero estoy simplificando aquí. Del mismo modo, tupla y la fila no son sinónimos, aunque parecen idénticos a primera vista.)

La razón principal para declarar una primaria La clave es descartar claves duplicadas o claves faltantes. A veces las personas de la base de datos eligen dejar duplicados y la ausencia de claves faltantes hasta los programadores cuyas aplicaciones escriben en la base de datos. Más comúnmente, una restricción de clave primaria sirve para reflejar un error de vuelta a un programa que infringe una restricción de clave primaria.

Cuando un DBMS configura una restricción de clave primaria, también crea un índice en la clave primaria. Esto permite que el DBMS encuentre duplicados rápidamente, y también acelera ciertas consultas que usan la (s) columna (s) clave.

En el nivel conceptual, las claves son el medio por el cual la comunidad de usuarios identifica instancias de entidades, ya sean personas (empleados, viajeros, etc.), cosas (cuentas bancarias, habitaciones de hotel, etc.) o lo que sea . La clave son los datos y la entidad identificada por la clave no es información. La clave se puede ver como un sustituto de la entidad en la base de datos.

En el nivel conceptual, las claves siempre son naturales, y el sistema nunca las suministra automáticamente. Sin embargo, en el mundo real, las claves a menudo se manejan mal, y las consecuencias de la mala gestión se ven superadas por lo que se llama "sentido común". Inculcar el sentido común en un sistema automatizado generalmente no es factible.

Nunca describí realmente un índice en lo anterior, pero está implícito en lo que dije. Un índice es una estructura de datos que sirve para asignar desde una clave a un puntero. En todas las bases de datos que es probable que use, los índices son declarados por el generador de bases de datos (o quizás un DBA) y administrados por el DBMS.

Cuestiones relacionadas