2012-02-11 1607 views
5

Tengo 2 tablas, User y Employee. Cada usuario recibe un User_ID y esa es una clave principal en la tabla User y una clave externa en la tabla Employee. ¿Puede ese atributo en la tabla Employee ser también una clave principal?¿Puede un atributo de base de datos ser clave primaria y extranjera?

+0

¿Qué es la clave principal en la tabla Empleados? Solo se permite una clave principal en cada tabla. Puede hacer una clave primaria compuesta (más de una columna). –

Respuesta

20

Si tiene una relación uno a uno entre dos tablas, la clave principal de la tabla de detalles también es una clave externa.

master   detail (1 : 1) 
+----------+ 1:1 +-------------+ 
| PK id |<---o| PK FK id | 
+----------+  +-------------+ 
|  col1 |  |  col1 | 
|  col2 |  |  col2 | 
|  etc. |  |  etc. | 
+----------+  +-------------+ 

Si usted tiene una relación-m-an, la tabla de unión tiene columnas relacionadas con las dos claves principales de la m y la N-mesas. Estas columnas son claves primarias y claves foráneas al mismo tiempo.

    m : n 
m_table   junction 
+----------+ 1:m +------------+  n_table 
| PK id1 |<---o| PK FK1 id1 | n:1 +----------+ 
+----------+  | PK FK2 id2 |o--->| PK id2 | 
|  col1 |  +------------+  +----------+ 
|  col2 |  |   |  |  col1 | 
|  etc. |  +------------+  |  etc. | 
+----------+      +----------+ 

Tenga en cuenta que con esta construcción, un registro de una tabla sólo puede estar vinculado a un registro específico de la otra mesa una vez, ya que cada clave primaria compuesta de la tabla de unión debe ser único. Si desea permitir que los emparejamientos no únicos, definir una tecla separada primaria en la tabla de unión:

    m : n 
        junction 
       +---------+ 
m_table   | PK id | 
+----------+ 1:m +---------+  n_table 
| PK id1 |<---o| FK1 id1 | n:1 +----------+ 
+----------+  | FK2 id2 |o--->| PK id2 | 
|  col1 |  |   |  +----------+ 
|  col2 |  +---------+  |  col1 | 
|  etc. |      |  etc. | 
+----------+      +----------+ 

En este caso, la clave principal y restricciones de clave externa se establecen en diferentes columnas. Alternativamente, también puede construir la clave principal con las dos claves externas más un numerador u otro atributo discernidor.


En su caso, si hay un uno uno-a-o un cero uno-a-o-uno entre User y Employee, entonces sí, el User_ID en la tabla Employee puede ser clave externa (FK) y clave principal (PK) al mismo tiempo. En palabras, esto significaría: un usuario también puede ser un empleado, en cuyo caso los datos del empleado se adjuntarían al usuario. Si no es un empleado (podría ser un experto externo), no se adjunta ningún registro de empleado. Si User_ID es FK y PK en Employee, cada usuario puede tener como máximo un registro de empleado adjunto. Si User_ID era solo FK pero no PK en la tabla Employee, entonces un usuario podría tener varios registros de empleados relacionados.

2

Sí. Haría esto, por ejemplo, si quisiera hacer cumplir que todos los empleados son usuarios, y algunos usuarios pueden ser empleados. Esto sería (cero o uno) a una relación.

De lo contrario, normalmente no tendría la clave principal igual que la clave externa, aunque podría contener una clave externa (s), como en el caso de una tabla de conexiones para una relación muchos a muchos.

Cuestiones relacionadas