Chave Estrangeira virando chave primária

6 respostas
S

Olá pessoal, estou com a seguinte dúvida.
Peguei a uml de um amigo meu e acontece que possui possui uma tabela de N:N e tem uma tabela associativa para essas 2 tabelas.
Vou passar um trecho do código para que possam ver como está.
Tabela Disciplina

create table disciplina( id number(11) not null constraint cd primary key, nome varchar(255), ementa varchar(255), curso_id number(11) null constraint cd1 references curso(id));

Tabela Professor

create table Professor( pessoa_id number(11) null constraint cp1 references pessoa(id), titulo varchar(255));

Tabela turma

create table turma( id number(11) not null constraint ct primary key, ementa varchar(255), disciplina_id null constraint ct1 references disciplina(id), professor_pessoa_id null constraint ct2 references professor(pessoa_id));

Erro que acontece ao tentar criar a tabela turma

Atc,

6 Respostas

E

Fala santos.fernando !!!

será que você precisa definir a coluna pessoa_id da tabela Professor com PK(Primary Key).

S

Desculpe, na verdade o erro está ocorrendo na hora que eu referencio a tabela professor. Será que o erro não acontece devido a classe Professor não ter Primary Key e sim chaves estrangeira (FK).

C

Parece que o seu script da tabela professor não está correto.

na tabela professor vc não tem primary key nem unique key,
por isso quando vc tenta fazer referencia nesta tabela da erro.

S

Uma tabela pra ser referenciada precisa de PK ou consigo referenciar apenas com uma FK ?

C

É bom sempre ter um pk na tabela,
mas vc pode referenciar mesmo sem a pk desde que vc possua uma unique key

ex:

ALTER TABLE PROFESSOR ADD CONSTRAINT AKPROFESSOR UNIQUE(PESSOA_ID);

após incluir a unique key o seu script irá funcionar…

mas melhor é incluir a pk nesta tabela

S

Então a melhor opção é colocar PK em todas as minhas tabelas, mesmo que na UML não apareça.
Ex: Tenho 10 tabelas UML, 7 dessas tabelas possuem id e as outras 3 não possuem, mas possuem FK. Então posso colocar PK nas 10 tabelas ?

Criado 11 de janeiro de 2010
Ultima resposta 11 de jan. de 2010
Respostas 6
Participantes 3