Chave Estrangeira virando chave primária

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,

Fala santos.fernando !!!

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

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).

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.

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

É 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

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 ?