2

나는 MySQL 데이터베이스를 사용하고 있습니다. 표 1에는 복합 기본 키가 있습니다. 표 1의 복합 PK를 참조하는 복합 외래 키가 있습니다 (표 2 참조).복합 외래 키로 잘못된 항목 생성

문제점은 아래에 나와 있습니다. :

표 1
| ------------ PK ----------- |
menuid     | categoryid     | 범주
1         | 1           | myCategoryName1
1         | 2           | myCategoryName2
2         | 1           | myCategoryName3
2         | 2           | myCategoryName4
2         | 3           | myCategoryName5

내가 표 1에 잘못된 항목을 참조하고 표 2에 항목을 만들 수 있습니다

:

표 2
| ------ FK ----------- |   | ---- PK ---- |
menuid     | categoryid     | postid   | 포스트 이름
1         | 3           | 1         | 내가 데이터베이스에 유효한 값을 삽입 할 수 있기 때문에 myPostName

는 지금, 그것은 큰 문제가되지 않습니다. 그러나 이것은 데이터베이스의 관계형 오류와 같으며 깨끗하고 올바르게 작동하는 DB를 갖고 싶습니다. 이 사소한 문제를 해결할 수있는 방법이 있습니까?

UPDATE : 내 데이터베이스를 구현하는 phpMyAdmin을 사용하던 분명히 phpMyAdmin을에 복합 외래 키를 구현하는 방법은 없습니다. 나는 Table2이 복합 외부 키 내 두 번째 테이블의 이름입니다

SHOW CREATE TABLE Table2

를 통해 내 잘못 구현 된 외래 키 볼 수 있었다.

그러면 I 올바르게

my_fk_constraint는 제약의 이름이 추가되는

ALTER TABLE Table2 ADD CONSTRAINT my_fk_constraint
FOREIGN KEY (menuid, categoryid)
REFERENCES Table1(menuid, categoryid)

통해 수동 복합 외래 키를 추가했다.

참고 : 정상적으로 될 것으로 수동으로,이 방법은 새로운 항목을 삽입 (나 FK 열을 클릭하여 corrresponding 테이블을 참조) 때 드롭 다운 메뉴를 사용하는 것을 허용하지 않습니다 외래 키 제약 조건을 추가 phpMyAdmin에서 할 수 있습니다.

감사합니다. pstthedayofcondor 모두 phpMyAdmin을 사용하여 작은 dicked 괴물입니다.

+0

확실히 적절한 관계를 인식지지를 사용하고 있는지 확인 : 당신이 제대로 제약 조건을 설정하면

이 발생하지 않아야합니다. 또한이 FK를 DML을 통해 정의 했습니까 (아니면 논리적입니까)? 그렇다면 어떻게? –

답변

1

정확 : 아니요, 예방 : 예! (의 MyISAM을 즉 이노 있지만) http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

+0

phpMyAdmin을 사용하고 있는데 외래 키 제약 조건을 잘못 구현 한 것으로 나타났습니다. (필자가 아는 한 phpMyAdmin은 복합 외래 키를 구현할 수 없습니다). 필자는 수동으로 DML을 사용하여 복합 외래 키 제약 조건을 추가 했으므로 올바른 것으로 당신과 PST에게 감사드립니다. – user1797415