Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Declaração de Foreign Key no Sql Server


Fábio R. L. de Oliveira
 Share

Question

criei a tabela aluno, como são duas chaves primárias eu usei o constraint. Até aí tudo ok.

create table aluno

(

cpf int not null,

matricula int identity,

constraint pk_id primary key (cpf, matricula),

nome varchar(60) not null

)

Agora eu tenho a tabela professor e quero fazer uma foreign key com as chaves primárias do aluno, mas eu já tentei de tudo, não consigo de jeito nenhum. Aí salvei a query e deixei assim:

create table professor

(

cod int primary key identity,

nome varchar(100) not null,

disciplina varchar(100) not null,

constraint pk_id foreign key references aluno (pk_id)

)

Alguém poderia identificar o meu erro? E como ficaria? Obrigado e bons estudos!

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Boa tarde Fábio,

Isto é pra faculdade? porque se for, não costumo ajudar não... rs.... mas vamos lá.

1 - Por que uma chave composta de cpf e matricula? As chaves primárias são dados que não significam nada. Quer dizer que os dados nela contidas servem apenas para um propósito: identificar uma tupla. Apenas isto. Por isso que perguntei por que da PK ser estes campos. Muitas pessoas colocam CPF, Matricula, RG, etc, como PK. Vi que a Matricula é INT. Vamos supor que a escola resolva alterar a matrícula: agora será uma letra inicial e uma sequência de números. você terá que reestruturar sua modelagem para realizar esta adaptação. Colocar estas informações como PK não é uma boa prática de modelagem.

2 - Mas caso realmente queira, o problema está associado a quantidade de colunas criadas. você tem uma chave composta na tabela Aluno. você terá que referenciar cada campo (como FK) na tabela filha. Ficaria assim (gosto de criar as tabelas e depois as cosntraints):

create table aluno(
cpf int not null,
matricula int identity,
constraint pk_id primary key (cpf, matricula),
nome varchar(60) not null)


create table professor(
cod int primary key identity,
nome varchar(100) not null,
disciplina varchar(100) not null,
cpf INT,
matricula INT)

ALTER TABLE professor WITH CHECK ADD CONSTRAINT [FK_Aluno] FOREIGN KEY(cpf, matricula)
REFERENCES aluno (cpf, matricula)

Link to comment
Share on other sites

  • 0

Vou precisar de você de novo! rs é que na facul ensinaram MySQL, estou agora migrando pro SQL Server..

Estou refazendo exercícios no SQL Server, e tem um assim:

A tabela Cidade tem 3 chaves primárias, CodCidade, CodCidadeOrigem e CodCidadeDestino

até aí ok eu declarei assim:

CREATE TABLE Cidade

(

CodCidade int not null,

CodCidadeOrigem int not null,

CodCidadeDestino int not null,

Nome varchar(60),

constraint pk_Cidade_CodCidades primary key(CodCidade,CodCidadeOrigem,CodCidadeDestino)

)

Aí estão declaradas as 3 chaves primárias da tabela Cidade, mas aí na tabela Voo tem duas Foreign Keys, que são: CodCidadeDestino e CodCidadeOrigem. Eu declarei assim:

CREATE TABLE Voo

(

NumVoo int not null,

Data datetime not null,

PrecoPassagem money not null,

CodCidadeOrigem int,

constraint fk_Voo_CodCidadeOrigem foreign key(CodCidadeOrigem) references Cidade(CodCidadeOrigem),

CodCidadeDestino int,

constraint fk_Voo_CodCidadeDestino foreign key(CodCidadeDestino) references Cidade(CodCidadeDestino)

)

Mas aí dá erro pois eu declarei 3 chaves primárias na tabela Cidade, sendo que só preciso de usar duas na tabela Voo.

Com base na minha tabela Cidade como você declararia essas duas foreign keys na table Voo?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.9k
    • Total Posts
      648.7k
×
×
  • Create New...