Ayuda con diseño de base de datos MySQL
-
21-09-2019 - |
Pregunta
Tengo siguientes entidades: listados residenciales, comerciales, anuncios de arrendamiento anuncio y Listados que mantiene propiedades destacadas para cada usuario. Lo más lógico parece aprovechar supertipo aproximación / subtipo y crear tablas siguientes:
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)
)
Pero cuando trato de crear la tabla residencial, MySQL devuelve el error "Error MySQL Número 1005. No se puede crear la tabla 'residencial' (Error: 150)"
Tal vez mi DDL es incorrecta. O es posible tener PK que a la vez es FK en MySQL? Si no es así, ¿cuál es el mejor diseño para tal escenario?
Solución
Dependiendo del motor que está utilizando en MySQL, claves externas no son compatibles. Si está utilizando INNODB que son compatibles, aunque no estoy seguro de si id puede ser un FK. No veo por qué no.
Si está utilizando FKs myisam no son compatibles.
También hay una posibilidad de que se está fallando debido a que los nombres de las columnas de la clave externa no están entre paréntesis.
FOREIGN KEY id REFERENCES listings(id)
se convierte
FOREIGN KEY (id) REFERENCES listings(id)
Ambos tienen este problema.
Jacob
Otros consejos
- Cambiar el nombre de la clave externa de la tabla "residencial".
- Asegúrese de que existe la tabla primaria.