Pergunta

Eu tenho seguintes entidades: listagens residenciais, listagens comerciais, listagem de arrendamento e listagens em destaque que possuem propriedades em destaque para cada usuário. O mais lógico parece aproveitar a abordagem do supertipo/subtipo e criar tabelas a seguir:

CREATE TABLE listings (
  id ...,
  listPrice ...,
  ...
  PRIMARY KEY (id)
)

CREATE TABLE residential (
  id ...
  ...
  PRIMARY KEY (id),
  FOREIGN KEY id REFERENCES listings(id)
)

CREATE TABLE featuredListings (
  id ..,
  userId ...,
  featuredListingId ...
  PRIMARY KEY (id),
  FOREIGN KEY featuredListingId REFERENCES listings(id)
)

Mas quando tento criar uma tabela residencial, o MySQL retorna o erro "MySQL Error Number 1005. Não é possível criar a tabela 'residencial' (errno: 150)"

Talvez meu DDL esteja incorreto. Ou é até possível ter PK que, ao mesmo tempo, é FK em MySQL? Caso contrário, qual é o melhor design para esse cenário?

Foi útil?

Solução

Dependendo do motor que você está usando no MySQL, as chaves estrangeiras não são suportadas. Se você estiver usando o InnoDB, eles são suportados, embora eu não tenha certeza se o ID pode ser um FK. Não consigo ver por que não.

Se você estiver usando o Myisam FKs, não é suportado.

Há também uma chance de estar falhando porque os nomes das colunas da chave estrangeira não estão dentro dos parênteses.

FOREIGN KEY id REFERENCES listings(id)

torna-se

FOREIGN KEY (id) REFERENCES listings(id)

Ambos têm esse problema.

Jacob

Outras dicas

  • Mude o nome da chave estrangeira na tabela "residencial".
  • Certifique -se de que a tabela pai exista.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top