내 문제는 내가 외래 키를 가질 테이블을 만들어야하고 세 개의 외래 키 중 하나가 NULL이 아니어야하며 나머지는 NULL이어야합니다. MySQL에서 해결할 부분이 있습니까? 마이클.MySQL 데이터베이스에서 null 작업. 세 개의 외래 키 중 하나는 null이 아니어야합니다.
답변
CREATE TABLE parent
(
id INT NOT NULL, PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child
(
id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
) ENGINE=INNODB;
널 (NULL) 외부 키를 피하십시오 - 그들은 문제와 단점들을 가지고있다. 일반적으로 별도의 테이블에 해당 열을 넣는 것이 더 쉽고 더 좋기 때문에 값이 없을 때 null을 만들 필요가 없습니다. 그게 기본 접근 방식이되어야합니다 : 당신이 하나의 테이블에 3 개의 열을 결합하는 특별한 이유가없는 한 각각의 뚜렷한 케이스에 대한 표준 양식.
은 완전히 동의하지 않습니다. Foriegn Key의 Nullable 1면을 갖는 것은 잘못된 것이 없습니다. 실제로는 공통입니다. –
@Mitch, 하나의 단점은 제약 조건이 적용될 때 적용되지 않는다는 것입니다. 쓸 수없는 "외래 키"는 실제로 외래 키가 아닙니다. 그들은 다른 DBMS와 소프트웨어 도구에서 다르게 작동하므로 한 사람이나 응용 프로그램이 nullable 외래 키를 해석하는 것이 다른 것과 다릅니다. 그들은 "null"이 의미하는 것의 일반적으로 적용되는 해석 하에서는별로 의미가 없습니다. 그리고 그것들은 완전히 불필요합니다. - nullable 제약으로 표현되는 것은 아무것도 없습니다. BTW "nullable 1 side"로 무엇을 의미하는지 확신 할 수 없습니다. – sqlvogel
질문 데이터베이스 디자인에 태그를 지정 했으므로 나는 당신에게 물어볼 것이라고 생각했습니다. 나는 2 개의 외래 키가 항상 null 인 것을 정당화 할 적절한 디자인을 생각할 수 없다. – Jacob
@Michal : 게시물 세부 정보. cularis 점으로, 당신의 디자인에는 아마 결함이있다. NULL은 정규화 된 데이터베이스 설계에 존재해서는 안됩니다 (특히 기본 및 외래 키에서). –
기본 키의 Null NO; 하지만 FK가 NULL이되는 한쪽면에는 아무런 문제가 없습니다 ... –