Question

J'ai des entités suivantes: inscriptions résidentielles, commerciales, annonces de location et liste en vedette annonces qui détient des propriétés en vedette pour chaque utilisateur. Le semble plus logique de tirer parti de l'approche supertype / sous-type et créer des tableaux suivants:

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

Mais quand je tente de créer la table résidentiel, Mysql renvoie l'erreur "Erreur MySQL Nombre 1005. Impossible de créer la table 'résidentiel' (errno: 150)"

Peut-être que mon DDL est incorrect. Ou est-il même possible d'avoir PK qui, dans le même temps est FK MySQL? Sinon, quelle est la meilleure conception pour un tel scénario?

Était-ce utile?

La solution

En fonction du moteur que vous utilisez dans MySQL, les clés étrangères ne sont pas pris en charge. Si vous utilisez InnoDB, ils sont pris en charge, bien que je ne suis pas sûr si id peut être un FK. Je ne vois pas pourquoi pas.

Si vous utilisez FKs MyISAM ne sont pas pris en charge.

Il y a aussi une chance qu'il échoue parce que les noms de colonnes de la clé étrangère ne sont pas à l'intérieur des parenthèses.

FOREIGN KEY id REFERENCES listings(id)

devient

FOREIGN KEY (id) REFERENCES listings(id)

Les deux ont cette question.

Jacob

Autres conseils

  • Modifier le nom de la clé étrangère dans la table « résidentiel ».
  • Assurez-vous que la table parent existe.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top