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?

¿Fue útil?

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.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top