2015-11-16 2 views
1

Я все еще новичок в SQL, и я немного застрял. Вот мой сценарий:Ограничение Oracle Employee

CREATE TABLE Employee 
     (SSN     NUMBER   NOT NULL, 
      FNAME    VARCHAR(8)  , 
      MINIT    VARCHAR(1)  , 
      LNAME    VARCHAR(7)  ,    
      BDATE    DATE   , 
      SEX     VARCHAR(1)  , 
      SALARY    NUMBER(8,2) , 
      SUPERSSN   NUMBER   , 
      DNO     NUMBER(2)  , 
CONSTRAINT Employee_PK PRIMARY KEY (SSN), 
CONSTRAINT Employee_FK1 FOREIGN KEY (SUPERSSN) REFERENCES Employee(SSN)); 

INSERT INTO Employee (SSN, FNAME, MINIT, LNAME, BDATE, SEX, SALARY, SUPERSSN, DNO) 
VALUES (123456789, 'John', 'B', 'Smith', '09-JAN-55', 'M', '30000', '333445555', '5'); 

COMMIT; 
DESC Employee 

Как вы можете видеть, я пытаюсь создать ограничение для SUPERSSN> ССН, но она всегда дает мне целостности ограничение нарушено - родительский ключ не найден Когда я удалить CONSTRAINT Employee_FK1 FOREIGN KEY (SUPERSSN) ССЫЛКИ Сотрудник (SSN) работает отлично.

Но, если я сохраню его и удалю вставку в скрипт сотрудника, он также отлично работает. Поэтому я не уверен, что я делаю неправильно.

Я использую Oracle.

+0

Вам нужно, чтобы _first_ вставить сотрудника с SSN, на который вы ссылаетесь. В этом весь смысл внешнего ключа: убедитесь, что вы ввели значение, которое уже существует –

+0

. Итак, вы говорите, что мне нужно сначала вставить значение, а затем добавить ограничение после? –

+0

Нет, вам нужно сначала вставить сотрудника с SSN = 333445555, прежде чем вы сможете вставить сотрудника, который использует это как SUPERSSN –

ответ

0

Если вы хотите добавить данные о столбце, что его внешний ключ должен быть уверен, что он имеет данные родителя, например, таблица SUPERSSN не содержит SSN 123456789.

Вставьте ресивер, где SSN = 123456789, и он будет работать.

Я приведу вам пример из 2 таблиц.

таблица FoodMarket содержат Id и employer

И таблица sandwich содержит столбец Id, Name и DateCreated

Теперь логически вы не можете иметь бутерброд, если он не существует на рынке, правильно ? Таким образом, мы создаем в этой таблице внешний ключ на один колонке ID

alter table Sandwish add CONSTRAINT fk_column 
    FOREIGN KEY (id) 
    REFERENCES FoodMarket(id) 

Так что, если вы хотите, чтобы вставить новый бутерброд, скажем, гамбургер, ее идентификатор должен существовать на рынке, если вы вставляете в сэндвич таблице ап в id = 10, но это значение = 10 не существует на рынке, оно вызовет ошибку, вы должны добавить первый id 10 в market, чтобы вы могли вставить id =10 в бутерброды в столовую.

+0

. Вкладываю ли я это после того, как после того, как я вставлю в значения сотрудников или раньше? –

+0

Как указано в a_horse_with_no_name, вы должны вставить сотрудника с SSN, позвольте мне объяснить вам, как работает ключ foriegn. скажем, есть автомобиль, который не принадлежит никому, вы не можете его зарегистрировать или водить или продать, потому что он не принадлежит никому (у него нет родителя). если этот автомобиль принадлежит вам, то вы являетесь родителем. поэтому, когда люди спрашивают этот автомобиль, для кого (его ключ foriegn), его для родительской джессики. возьми ? @JessicaChu – Moudiz

+0

Я знаю, но я все еще новичок в SQL, поэтому я создаю таблицу, в которой эти данные сначала помещаются после ограничения? вы можете показать мне полный сценарий, пожалуйста. < –

Смежные вопросы