Ver Mensaje Individual
  #24 (permalink)  
Antiguo 21/09/2009, 05:36
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORDER BY me duplica el resultado

PK: Es el acrónimo de PRIMARY KEY y se refiere a un campo o conjunto de campos cuyo valor esa único por cada registro de una tabla. Cuando eso sucede se dice que ese campo es una clave de identificación primaria, ya que es la que permite reconocer un conjunto de atributos dentro de todo el universo de conjuntos de una tabla.
Las PK tienen dos usos básicos en los motores de bases de datos: Identificación y ordenamiento. Como identificación, ya lo aclaramos: Como ordenamiento es porque siendo la clave de búsqueda principal, es útil por cuestiones de uso, utilizarla para mantener el orden físico de los registros de una tabla en el disco, de modo de poder acceder a ellos más rápidamente a través de índices (se denominan agrupados o cluster y sólo hay uno por tabla). En este sentido las PK se usan para eso, lo que implica que cambiar de clave o renumerarla (si fuesen claves numéricas) obliga al DBMS a reescribir tablas e índices.
Por su importancia y uso, son los primeros atributos en ser identificados y los primeros campos que se definen.
Cuando no existen campos que puedan usarse para identificar un registro, una de las reglas de normalización dice que debe agregarse un campo para crear artificialmente una PK. Es habitual que sean numéricos e incrementales, pero no es obligatorio.
Una PK tiene tres condiciones: A) Identifica un registro en una tabla, B) su valor es único en la tabla (UNIQUE), c) No puede ser NULL.

KEY UNIQUE: Se refiere a la condición de un campo como de valor no repetitivo. Esto significa que puede haber más de un campo o conjunto de campos que cumplan con la condición necesaria para ser PK, pero sólo puede usarse uno de esos conjuntos. El resto se denominan claves candidatas y pueden usarse para definir índices de búsqueda y ordenamiento diferentes.
La cláusula KEY UNIQUE suele aparecer en el CREATE de una tabla referida a la PK, porque la PK también debe ser definida como UNIQUE.


PRODUCTO CARTESIANO: Es la resultante de una operación de conjuntos (las tablas son en un sentido, relaciones de conjuntos). Es la peor condición de búsqueda en una consulta y se refiere a el producto de dos tablas, registro por registro; es decir: un producto cartesiano entre dos tablas devuelve una tabla en que se combinan cada registro de la primera con cada uno de los de la segunda.
Si una tabla tuviese 10 campos y 1200 registros, y la otra 50 campos y 10.000 registros, la tabla devuelta tendrá registros de 60 campos (10 + 50) y una longitud de 12.000.000 de registros (1.200 x 10.000). Eso te puede dar una idea de los problemas que causa.

CLAVE FORANEA (FK): Las claves foráneas (también denominadas extranjeras o ajenas) son campos o conjuntos de campos en una tabla que se usan para relacionar esa tabla con otra, y en la cual se almacenan el valor de una PK de la otra tabla. De esa forma se establece la relación entre uno (o más) registro(s) de una tabla con uno (o mas) de otra.
Una FK tiene algunas condiciones:
1. Debe apuntar a una PK. Siempre. No se puede usar otro tipo de campo en la la tabla de origen. Solamente PKs.
2. No puede contener un valor que no exista en la tabla origen.
3. No puede, salvo ciertas excepciones, ser NULL.
4. Debe apuntar a toda la clave y no a parte de ella (en el caso de las PK compuestas).
5. Ambas claves (FK y PK) deben ser del mismo tipo. Si son numéricas, deben ser del mismo rango (TINYINT, SMALLINT, MEDIUMINT, INT o BIGINT) y tipo (SIGNED o UNSIGNED).

Respecto a:
Cita:
creo qu no lo entendi bien y ademas creo que tambien lo copie mal, porq ahora hice la consulta en en el propio mysql y me salto un error,
¿Qué dice el error?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)