2009-08-24 9 views
7

¿Es posible establecer una restricción única como una clave externa en otra tabla? En caso afirmativo, ¿cómo harías para declararlo?¿Es posible establecer una restricción única como una clave externa en otra tabla?

¿Cómo haría para asignar una clave candidata? ¿Es posible?

Ejemplo: Tengo una tabla de productos que consta de:

prod_id, prod_name, prod_price, QOH 

Donde quiero prod_name para enlazar a la mesa de despacho:

desp_id, prod_name, shelfLoc, quantity 

lo que estaba pensando es que puedo necesitar para crear una restricción única que se verá así:

ALTER TABLE product 
ADD CONSTRAINT prod_nameID_uc 
UNIQUE (prod_id,prod_name) 

Lo que me pregunto es si es posible hacer referencia a una clave única como clave externa en la tabla de envío. Tengo que tener prod_name en lugar de prod_id en la tabla de envío para que la información sea más significativa para el usuario al leerla, en lugar de ver un número de identificación. Estoy usando iSQL plus en Oracle.

+0

¿Puedes dar un ejemplo de lo que quieres decir? Usted tiene una columna en 'tableB' que debe ser' UNIQUE' y ser 'FOREIGN KEY' a' tableA'? Además, ¿qué motor de base de datos está utilizando? – VoteyDisciple

Respuesta

2

Esto es necesariamente dependiente de DBMS. En los DBMS con los que estoy familiarizado, la restricción única y la restricción de clave externa son consideraciones separadas, puede tener ambas y ambas actúan normalmente cuando se combinan.

6

Es perfectamente posible hacer referencia a una restricción UNIQUE en una clave de Oracle EXTERIOR:

SQL> create table products (
    2  prod_id number not null 
    3  , prod_name varchar2 (30) not null 
    4  , constraint prod_pk primary key (prod_id) 
    5  , constraint prod_uk unique (prod_name) 
    6  ) 
    7/

Table created. 

SQL> create table despatch (
    2  desp_id number not null 
    3  , prod_name 
    4  , constraint desp_pk primary key (desp_id) 
    5  , constraint desp_prod_pk foreign key (prod_name) 
    6   references products (prod_name) 
    7  ) 
    8/

Table created. 

SQL> 

Sin embargo, es una mala práctica. La razón principal para usar una clave principal junto con una clave única es proporcionar una clave sintética para usar en claves externas. Yo era tú, me preocuparía que tus maestros te den un assignment riddled with bad practice.

+0

Oh, créanme, estoy totalmente de acuerdo. Ni siquiera nos han enseñado la mitad de las cosas que esperan que ejecutemos dentro de la tarea. Flojo. – taksIV

Cuestiones relacionadas