2015-12-28 33 views
-1

我正在實現由3個其他值組成的複合主鍵。我創建了表格,並在所有其他字段中插入了數據。我是否正確地假設我不需要爲複合pk提供值,因爲它使用其他值創建它自己?這裏是我的創建和插入腳本來幫助...複合主鍵顯示爲空

CREATE TABLE representation 
(
    representation_id NUMBER (4), 
    reference_id  NUMBER (4), 
    case_id    NUMBER (4), 
    barrister_id  NUMBER (2), 
    CONSTRAINT representation_case_id_fk FOREIGN KEY 
     (case_id) 
     REFERENCES CASE (case_id), 
    CONSTRAINT representation_barrister_id_fk FOREIGN KEY 
     (barrister_id) 
     REFERENCES barrister (barrister_id), 
    CONSTRAINT representation_pk PRIMARY KEY 
     (reference_id, case_id, barrister_id) 
); 

INSERT INTO representation (reference_id, case_id, barrister_id) 
    VALUES (sq_representation_reference.NEXTVAL, '0', '5'); 
+2

問題是什麼?您是否期望* representation_id *獲得價值? – trincot

+2

是的,您必須將值填充到主鍵字段中。祝你好運。 –

+0

@trincot我不是「期待」它......我不確定結果會是什麼,我不確定它是否會被填充。我認爲我需要自己填充它 - 這是有道理的。只是想確定。雖然 –

回答

0

沒有指令這裏甲骨文給representation_id的值。儘管該字段的名稱作爲一個獨特的標識符非常具有啓發性,但實際上沒有任何東西可以實現,也沒有提供任何價值。

你必須自己插入一個值。這可以在幾個方面做,比如:

  • 爲它定義一個默認值(但這每次給它的值相同),或
  • 在您INSERT聲明的名稱和值,或
  • 編寫一個ON INSERT觸發器,您可以在其中通過基於其他三個公式的某個公式定義該字段的值,或者從一個序列中獲取該值。
0

您的複合主鍵包括三列:

CONSTRAINT representation_pk PRIMARY KEY 
    (reference_id, case_id, barrister_id) 

你插入語句成功,因爲那些都是三列您填充:

INSERT INTO representation (reference_id, case_id, barrister_id) 

什麼也沒有發生與REFERENCE_ID因爲它是一個可選列:

SQL> desc representation 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
REPRESENTATION_ID         NUMBER(4) 
REFERENCE_ID        NOT NULL NUMBER(4) 
CASE_ID         NOT NULL NUMBER(4) 
BARRISTER_ID        NOT NULL NUMBER(2) 

SQL> 

(即使您沒有明確指定NOT NULL約束,Oracle也會強制使用主列。)