Pelo que sei, deve funcionar, passei por outras questões semelhantes, mas parecia ser uma coisa diferente causando o mesmo erro.
CREATE TABLE Job
(
JobNumber INT NOT NULL,
JobName CHAR(30) NOT NULL,
JobDescription CHAR(60) NOT NULL,
Title Char(30) NOT NULL,
PersonID INT NOT NULL,
CONSTRAINT PK_JobNum PRIMARY KEY (JobNumber)
);
CREATE TABLE Employee
(
PersonID INT NOT NULL,
FirstName CHAR(30) NOT NULL,
LastName CHAR(30) NOT NULL,
CONSTRAINT Pk_PersonID PRIMARY KEY(PersonID),
CONSTRAINT FK_Job_2_Employee FOREIGN KEY(PersonID) REFERENCES Job(PersonID)
);
CREATE TABLE Game
(
GameNumber INT NOT NULL,
Title CHAR(30) NOT NULL,
System CHAR(30) NOT NULL,
CONSTRAINT PK_GameNumber PRIMARY KEY(GameNumber),
CONSTRAINT FK_Job_2_Game FOREIGN KEY(Title) REFERENCES Job(Title)
);
Ocorre um erro quando tento inicializar a segunda tabela. (E provavelmente chegará no terceiro.)
- Várias pessoas podem ter o mesmo trabalho e uma pessoa pode ter vários empregos.
- O
JobNumber
e oJobName
não são a mesma coisa. CadaJobNumber
um tem apenas um funcionário, e um únicoJobNumber
tem apenas umJobName
. - O
JobNumber
e o trabalho que uma pessoa tem não é a mesma coisa. - O número do trabalho e o tipo de trabalho não são a mesma coisa. Por exemplo, tanto o número de trabalho 1235 quanto o 1435 podem ter o trabalho "designer de nível".
Parece que você está colocando a chave estrangeira na tabela errada. A coluna
PersonID
naJobs
tabela deve fazer referência aPersonID
naEmployee
tabela.Se você estiver atribuindo pessoas a trabalhos, sua chave estrangeira original deve estar em
JobId
. Isso exigiria adicionar oJobId
àEmployees
tabela e remover oPersonId
daJobs
tabela.Se
Employees
pode ter muitosJobs
eJobs
pode ter mais de umEmployee
, então você vai querer uma tabela de junção. Ele terá chaves estrangeiras para a tabelaJobs
e .Employees
A chave primária da tabela de junção incluirá tanto oPersonId
eJobId
.Job.PersonID não tem uma restrição única
Eu acho que é isso que você quer ter
Mas ainda está confuso em apenas uma pessoa pode ter um emprego
Se for esse o caso, basta combinar Job e Employee
E isso estragou:
Job.Title não é único
Por que você teria um relacionamento entre dois caracteres (30)
Isso é uma bagunça
Você fornece requisitos contraditórios nos comentários
Você precisa dar um passo atrás e fazer um design de dados adequado
Graças às sugestões acima consegui resolver, combinei as duas soluções. (Uma é que eu estava fazendo isso de trás para frente, a outra que usar um Title é um Bad Id.
Eu simplesmente substituí o título por um Game_ID. (Diferentes Game_IDs podem compartilhar um título semelhante e são números.)