0

Ben emp1 ve Emp2 ile tablolarOracle'da iki sütunlu birincil anahtar?

emp1:

emp_1 | emp_2 
1  | 2 
3  | 4 
5  | 6 

Emp2:

Ben masa emp1 ve Emp2 yabancı anahtara birincil anahtarı ayarlamak çalıştı
emp 
1 
2 
3 
6 

.

alter table emp1 add primary key(emp_1,emp_2); 

yabancı anahtar için:

alter table emp2 
add foreign key (emp) 
references a_t1(emp_1,emp_2); 

Hata: Lütfen

Error report - 
SQL Error: ORA-02256: number of referencing columns must match referenced  columns 
02256. 00000 - "number of referencing columns must match referenced columns" 
*Cause: The number of columns in the foreign-key referencing list is not 
     equal to the number of columns in the referenced list. 
*Action: Make sure that the referencing columns match the referenced 
     columns. 

bu hatayı çözmek için bana yardımcı ve

Kodum: Birincil anahtar için

birincil anahtarı ayarlayın.

+0

Bir alandan iki alana bir yabancı anahtar eklemeyi deniyorsunuz; EMP2 tablosundaki değerlerin EMP1 tablosundan emp_1 veya emp_2 sütunundaki kayıtlarla eşleşmesi gerekip gerekmediğine karar vermelisiniz. – Aleksej

+1

Bir FK'nin bir parçasına veya iki ayrı anahtardan (PK veya İngiltere) birine referansta bulunabilirsiniz. Eğer emp1'de değerler (7,8) ve değerler (8,9) ile satırlar olsaydınız ve emp2'de değer (8) ile bir satır isteseydiniz ne olur? Ebeveynte hangi satır buna atıfta bulunur? –

+0

Evet anladım. Kompozit bir birincil anahtar yapmaya çalışıyordum. – user5505661

cevap

1

Bunu yapmayı düşünebilmemin tek yolu, maddileşmiş bir görünümü içeren kötü bir kesmek. Verilerinizi düzeltmek daha iyi olur, böylece birincil anahtarın iki sütuna yayılmasına neden olmaz.

CREATE TABLE EMP1 (
    EMP_1 INT UNIQUE, 
    EMP_2 INT UNIQUE, 
    PRIMARY KEY (EMP_1,EMP_2) 
); 

CREATE MATERIALIZED VIEW LOG ON EMP1 
    WITH SEQUENCE, ROWID(EMP_1, EMP_2) 
    INCLUDING NEW VALUES; 

CREATE MATERIALIZED VIEW EMP1_MV 
    BUILD IMMEDIATE 
    REFRESH FAST ON COMMIT 
    AS SELECT EMP_1 AS EMP 
     FROM EMP1 
     UNION ALL 
     SELECT EMP_2 
     FROM EMP1; 

ALTER TABLE EMP1_MV ADD CONSTRAINT EMP1_MV__PK PRIMARY KEY (EMP); 

CREATE TABLE EMP2 (
    EMP INT PRIMARY KEY REFERENCES EMP1_MV(EMP) 
); 
+0

Teşekkürler U. Kavramı aldım. Materyalize bakışla deneyeceğim. – user5505661