http://weblogs.foxite.com/andykramek/archive/2008/09/03/6656.aspx
Autor: Andy Kramek
Traducido al español con autorización del autor por: Luis María Guayán
La palabra "clave" tiene un sentido muy particular en el diseño de bases de datos relacionales. Se refiere a un campo cuyo valor está compartido entre las tablas. El propósito de esta duplicación de datos es permitir un registro en una tabla esté asociado con un registro a otra, lo que permite la extracción de información que está distribuida entre las tablas. Esta asociación se denomina como una "relación" y es lo que diferencia las bases de datos relacionales, de las bases de datos de archivos planos.
Hay dos tipos de claves relacionales:
- PRIMARIA (PRIMARY) Una clave primaria es la columna, o una combinación de columnas, cuyo valor identifica de forma exclusiva un único registro dentro de una tabla. Ni la clave primaria, ni ninguna parte de ella, puede tener un valor NULO
- FORANEA (FOREING) Una clave foránea es la columna, o una combinación de columnas en una tabla cuyo valor identifica a un solo (es decir, relacionado) registro de otra tabla. Una clave foránea puede, bajo algunas circunstancias, tener un valor NULO que indica que no hay registros relacionados.
Es una regla fundamental que todas las tablas deben tener una clave primaria. Esto es evidente si consideramos una tabla que contiene los nombres verdaderos de mis familiares directos que se enumeran a continuación.
Nombre Apellido Stanley Kroset Elaine Kroset Andrew Kroset Richard Kroset Angela KrosetEsto está bien y muestra mi padre (Stanley) y mi madre (Elaine), junto con mi hermano menor (Richard) y mi hermana (Angela). La clave primaria de esta tabla es la combinación de nombre-apellido y es perfectamente permitido. Sin embargo, no es un buen diseño, porque cuando mi hermano se casó con una muchacha llamada "Angela" (y sí, realmente así fue) nos encontramos con un problema cuando intentamos agregar a mi nueva cuñada a esta tabla:
Nombre Apellido Stanley Kroset Elaine Kroset Andrew Kroset Richard Kroset Angela Kroset Angela KrosetAhora no tenemos manera de distinguir entre mi hermana y mi cuñada! Esta tabla ya no tiene una clave primaria y en ausencia de cualquier información adicional es realmente inútil. Por supuesto, la solución obvia es añadir algo adicional, diferente, tal vez la "inicial" del segundo nombre, a pesar de que esta no es una buena opción, sobre todo porque no todo el mundo tiene uno, y el valor aún podría no ser único, y en este caso no lo es (el segundo nombre de mi hermano es "Maurice", el de mi hermana es "Mary" y el de mi cuñada es "Margaret").
Nombre Apellido Inicial Stanley Kroset Elaine Kroset Andrew Kroset E Richard Kroset M Angela Kroset M Angela Kroset MEl punto de este ejemplo, es que es sumamente importante definir una clave primaria para cada tabla, de forma de que cada registro pueda ser único e identificado inequívocamente. Hasta ahora hemos definido la clave primaria como una combinación de columnas que se utilizan para almacenar los datos. Esto se conoce como una clave "compuesta".