2016-01-22 2 views
0

Ошибка SQLIntegrity ограничения (JAVAUSER.SYS_C007925) нарушено - родительский ключ не найден

Я не уверен, что я сделал неправильно здесь

Вот DDL я использовал для создания своих таблиц

Create Table HomeState (StateAbbreviation char(2) Primary Key, 
     StateName varchar(25)); 

Create Table Country (CountryAbbreviation char(2) Primary Key, 
      CountryName varchar(35)); 

Create Table Employee (EmployeeID Integer Primary Key NOT NULL, 
         FirstName varchar(20), 
         LastName varchar(30), 
         MI char(1), 
         HomeAddress varchar(30), 
         Zip char(5), 
         DateOfBirth date, 
         HireDate date, 
         TerminationDate date, 
         AnnualSalary number(20,2), 
         LicenseDate date, 
         StateAbbreviation char(2), 
         CountryAbbreviation char(2), 
         Foreign Key (StateAbbreviation) references HomeState, 
         Foreign Key (CountryAbbreviation) references Country); 

Create Table Truck (VinNumber Integer Primary Key, 
      Make varchar(25), 
      Model varchar(30), 
      Year Integer, 
      PurchasePrice number(20,2), 
      LicenseNumber varchar(15)); 

Create Table EmployeeTruck (EmployeeID Integer, 
      VinNumber Integer, 
      Primary Key(EmployeeID,VinNumber), 
      Foreign Key (EmployeeID) references Employee, 
      Foreign Key (VinNumber) references Truck); 

Create Table Accident (AccidentID Integer Primary Key, 
      DateOfAccident date, 
      AccidentDescription varchar(200), 
      AccidentLocation varchar(100), 
      EmployeeID Integer, 
      Foreign Key (EmployeeID) references Employee); 

и вот команда, я использовал, чтобы попытаться заполнить таблицу сотрудников

insert into employee 
values ('1','brian','kim','j','adfasdf', 
     '1234','24-nov-1993','24-sep-1993','24-sep-1993', 
     '1234','24-sep-1993','as','as') 

но всегда ГИ ves me ошибка, которую я поставил в качестве названия этого вопроса ...

ответ

0

В таблице «Сотрудник» вы говорите, что Foreign Key (StateAbbreviation) references HomeState и Foreign Key (CountryAbbreviation) references Country). Значения, которые вы вставляете в Employee.HomeState и Employee.CountryAbbreviation, должны существовать в таблицах HomeState и Country, прежде чем вы сможете вставлять их в Employee.

Вставьте строки в HomeState и Country, прежде чем вставлять в Employee.


У вас также есть другие проблемы. Вот пример.

Create Table HomeState (StateAbbreviation char(2) Primary Key, 
    StateName varchar(25)); 

insert into HomeState values ('AL', 'Alabama'); 
insert into HomeState values ('AM', 'Alabama'); 
insert into HomeState values ('AN', 'Alabama'); 

Все эти заявления вставки выполнены успешно. Они не должны. В этом случае StateName также является ключом-кандидатом.

Create Table HomeState (
    StateAbbreviation char(2) Primary Key, 
    StateName varchar(25) not null unique 
); 

Давайте рассмотрим это немного дальше.

Create Table HomeState (
    StateAbbreviation char(2) Primary Key, 
    StateName varchar(25) not null unique 
); 

Create Table Country (
    CountryAbbreviation char(2) Primary Key, 
    CountryName varchar(35) not null unique 
); 

insert into HomeState values ('CA', 'California'); 
insert into Country values ('AF', 'Afghanistan'); 

insert into Employee (EmployeeID, StateAbbreviation, CountryAbbreviation) 
values (-42, 'CA', 'AF'); 

Состояние «Калифорния, США» имеет смысл. Государство «Калифорния, Афганистан» этого не делает.

Работник, имеющий имя, не имеет смысла. Объявить FirstName, LastName и HireDate not null.

Ставка на это: какая бы глупость ваша база данных не позволяла появляться. Это вопрос времени.

+0

большое спасибо !! – Brian

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