2009-08-24 10 views
7

Ist es möglich, eine eindeutige Einschränkung als Fremdschlüssel in einer anderen Tabelle festzulegen? Wenn ja, wie würdest du das erklären?Ist es möglich, eine eindeutige Einschränkung als Fremdschlüssel in einer anderen Tabelle festzulegen?

Wie würden Sie einen Kandidatenschlüssel zuweisen? Ist es möglich?

Beispiel: Ich habe eine Produkttabelle, die besteht aus:

prod_id, prod_name, prod_price, QOH 

Wo ich prod_name auf die Depesche Tabelle verknüpfen möchten:

desp_id, prod_name, shelfLoc, quantity 

Was ich dachte, dass ich brauchen kann um eine eindeutige Einschränkung zu erzeugen, die wie folgt aussehen wird:

Ich frage mich, ob es möglich ist, in der Versandtabelle auf einen eindeutigen Schlüssel als Fremdschlüssel zu verweisen. Ich muss prod_name anstelle von prod_id in der Versandtabelle haben, damit die Information für den Benutzer beim Lesen es bedeutungsvoller ist, anstatt eine ID-Zahl zu sehen. Ich verwende iSQL plus auf Oracle.

+0

Können Sie ein Beispiel dafür geben, was Sie meinen? Sie haben eine Spalte in 'tableB', die sowohl' UNIQUE' als auch 'FOREIGN KEY' zu' tableA' sein muss? Welche Datenbank-Engine benutzt du? – VoteyDisciple

Antwort

2

Dies ist notwendigerweise DBMS-abhängig. In den DBMS, die ich kenne, sind die eindeutige Einschränkung und die Fremdschlüsseleinschränkung getrennte Überlegungen, Sie können beides haben, und beide verhalten sich normal, wenn sie kombiniert werden.

6

Es ist durchaus möglich, eine UNIQUE-Einschränkung in einem Oracle-FOREIGN KEY zu verweisen:

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> 

Es ist jedoch schlechte Praxis. Der Hauptgrund für die Verwendung eines Primärschlüssels neben einem eindeutigen Schlüssel besteht darin, einen synthetischen Schlüssel für die Verwendung in Fremdschlüsseln bereitzustellen. Ich bin du, ich wäre besorgt, dass deine Lehrer dir eine assignment riddled with bad practice geben.

+0

Oh glaub mir, da stimme ich total zu. Sie haben uns nicht einmal die Hälfte der Dinge beigebracht, die sie von uns erwarten. Locker. – taksIV

Verwandte Themen