2

我有以下实体:住宅列表、商业列表、租赁列表和特色列表,其中包含每个用户的特色属性。最合乎逻辑的似乎是利用超类型/子类型方法并创建下表:

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 不正确。或者甚至有可能在 MySQL 中同时拥有 FK 的 PK?如果不是,那么这种场景的最佳设计是什么?

4

2 回答 2

3

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

如果您使用的是 MISAM,则不支持 FK。

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

FOREIGN KEY id REFERENCES listings(id)

变成

FOREIGN KEY (id) REFERENCES listings(id)

两者都有这个问题。

雅各布

于 2010-02-19T05:40:42.480 回答
0
  • 更改“住宅”表中外键的名称。
  • 确保父表存在。
于 2010-02-19T05:42:58.937 回答