Вопрос

У меня есть следующие объекты:жилые списки, коммерческие списки, списки аренды и рекомендуемые списки, которые содержат рекомендуемые свойства для каждого пользователя.Наиболее логичным представляется использовать подход supertype / subtype и создать следующие таблицы:

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

Но когда я пытаюсь создать резидентную таблицу, Mysql возвращает ошибку "Номер ошибки MySQL 1005.Не удается создать таблицу 'residential' (ошибка отсутствует:150)"

Возможно, мой DDL неверен.Или вообще возможно ли иметь PK, который в то же время является FK в MySQL?Если нет, то какой дизайн лучше всего подходит для такого сценария?

Это было полезно?

Решение

В зависимости от движка, который вы используете в MySQL, внешние ключи не поддерживаются.Если вы используете INNODB, они поддерживаются, хотя я не уверен, может ли id быть FK.Я не понимаю, почему бы и нет.

Если вы используете MYISAM, FKS не поддерживаются.

Существует также вероятность того, что это сбой, потому что имена столбцов внешнего ключа не заключены в круглые скобки.

FOREIGN KEY id REFERENCES listings(id)

становится

FOREIGN KEY (id) REFERENCES listings(id)

У обоих есть эта проблема.

Джейкоб

Другие советы

  • Измените имя внешнего ключа в таблице "резидентный".
  • Убедитесь, что родительская таблица существует.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top