Помощь с дизайном базы данных Mysql - PullRequest
2 голосов
/ 19 февраля 2010

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

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. Не удается создать таблицу« резидентная »(errno: 150) "

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

Ответы [ 2 ]

3 голосов
/ 19 февраля 2010

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

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

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

FOREIGN KEY id REFERENCES listings(id)

становится

FOREIGN KEY (id) REFERENCES listings(id)

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

Jacob

0 голосов
/ 19 февраля 2010
  • Измените имя внешнего ключа в таблице «проживание».
  • Убедитесь, что родительская таблица существует.
...