Mysql数据库设计帮助

Mysql数据库设计帮助,mysql,database-design,mysql-error-1005,Mysql,Database Design,Mysql Error 1005,我有以下实体:住宅房源、商业房源、租赁房源和特色房源,为每个用户保留特色房产。最符合逻辑的方法似乎是利用超类型/子类型方法并创建以下表格: CREATE TABLE listings ( id ..., listPrice ..., ... PRIMARY KEY (id) ) CREATE TABLE residential ( id ... ... PRIMARY KEY (id), FOREIGN KEY id REFERENCES listings(id

我有以下实体:住宅房源、商业房源、租赁房源和特色房源,为每个用户保留特色房产。最符合逻辑的方法似乎是利用超类型/子类型方法并创建以下表格:

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。无法创建“驻留”表(错误号:150)”


也许我的DDL不正确。或者甚至有可能在MySQL中同时具有FK的PK吗?如果不是,这种情况下的最佳设计是什么?

根据您在MySQL中使用的引擎,外键不受支持。如果您使用的是INNODB,则支持它们,尽管我不确定id是否可以是FK。我看不出为什么不

如果您正在使用MYISAM,则不支持FKs

它也有可能失败,因为外键的列名不在括号内

FOREIGN KEY id REFERENCES listings(id)
变成

FOREIGN KEY (id) REFERENCES listings(id)
两者都有这个问题

雅各布
  • 更改“住宅”表中外键的名称
  • 确保父表存在

  • 啊,没关系。即使我为“住宅”表指定了InnoDB,我也忘了将“列表”表更改为InnoDB。现在它起作用了。