Помощь в проектировании базы данных Mysql
-
21-09-2019 - |
Вопрос
У меня есть следующие объекты:жилые списки, коммерческие списки, списки аренды и рекомендуемые списки, которые содержат рекомендуемые свойства для каждого пользователя.Наиболее логичным представляется использовать подход 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)
У обоих есть эта проблема.
Джейкоб
Другие советы
- Измените имя внешнего ключа в таблице "резидентный".
- Убедитесь, что родительская таблица существует.