2010-02-19 67 views
2

我有以下实体:住宅列表,商业列表,租赁列表和特色列表,其中包含每个用户的特色属性。最合乎逻辑似乎利用超/亚型的方法,创建下表:帮助Mysql数据库设计

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中同时使用PK呢?如果不是,这种情况下最好的设计是什么?

回答

3

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

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

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

FOREIGN KEY id REFERENCES listings(id) 

成为

FOREIGN KEY (id) REFERENCES listings(id) 

两者都有这个问题。

雅各

+0

啊,没关系。即使我指定InnoDB为“住宅”表,我忘了将“列表”表更改为InnoDB。现在它可以工作。 – Zhaidarbek

0
  • 变化的“住宅”表的外键的名称。
  • 确保父表存在。