2010-02-19 2 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를 반환을 '주거'(errno를 : 150) "

내 DDL이 잘못되었을 수 있습니다. 또는 동시에 MySQL에서 FK가있는 PK를 가질 수 있습니까? 그렇지 않은 경우 이러한 시나리오에 가장 적합한 디자인은 무엇입니까?

답변

3

MySQL에서 사용하는 엔진에 따라 외래 키가 지원되지 않습니다. 당신이 INNODB를 사용하고 있다면 ID가 FK 일지 모르지만 지원됩니다. 나는 왜 안 볼 수 없습니다.

MYISAM을 사용하는 경우 FK는 지원되지 않습니다.

외래 키의 열 이름이 괄호 안에 없기 때문에 실패 할 가능성이 있습니다.

FOREIGN KEY id REFERENCES listings(id) 

FOREIGN KEY (id) REFERENCES listings(id) 

모두이 문제가된다.

야곱

+0

아, 신경 쓰지 마세요. 내가 "주거용"테이블에 대해 InnoDB를 지정 했더라도 "listing"테이블을 InnoDB로 변경하는 것을 잊어 버렸습니다. 이제 작동합니다. – Zhaidarbek

0
  • 변경 "주거"테이블의 외래 키의 이름입니다.
  • 상위 테이블이 있는지 확인하십시오.