Ajuda com o design do banco de dados MySQL
-
21-09-2019 - |
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?
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.