작은 피자 배달 웹 사이트에서 일하고 있는데 MySQL 테이블에 작은 문제가 발생했습니다. Mysql 외래 키가 상위 테이블의 전체 기본 키를 참조해야합니까?
는 I에 유래에서 이걸 발견 :- 두 테이블은 INNODB 엔진을 사용해야합니다 : https://stackoverflow.com/a/10322293/80907
그것은 다음과 같은 언급하고있다.
- "참조하는 테이블에서 외래 키 열이 동일한 순서의 첫 번째 열로 나열되어 인덱스가 있어야합니다."
을 첫 번째는 정말 문제가 있지만, 두 번째 규칙 아니다 내 머리를 긁적 인 곳이야.
피자를 주문할 수있는 웹 사이트이므로 사용자의 모든 데이터와 주문을 데이터베이스에 저장합니다.
는 여기에 내가 써하려고 해요 무엇의 스크린 샷입니다 :
그래서 내가 "사용자"테이블과 "주문"테이블을해야합니다. 사용자는 주문과 일대 다 관계를 유지해야합니다. 간단히 말해서, 주문은 그것을 만든 사용자에 의해 식별됩니다. 따라서 일대 다 방식으로 식별합니다.
"주문"테이블에 외래 키 (예 : "사용자 _ ID")가 있음을 의미합니다.
피자 테이블과 Orders 테이블 간의 다 대다 관계에 대한 테이블을 만들어야 할 때 문제가 발생합니다.
이 테이블을 "Order_Details"(자동으로 "Orders_has_Pizzas"라고하는 MySQL Workbench)라고 부르 자. "주문"과 "피자"를 모두 참조해야합니다.
이제 "주문"은 식별 관계에있는 사용자 테이블을 이미 참조하기 때문에 "주문"의 기본 키의 일부입니다.
과의 밖으로 다시 한 번 그 규칙하자 ". 외래 키 열이 동일한 순서의 첫 번째 열로 나열되어 인덱스가 있어야합니다, 참조하는 테이블에서"
- 을
이것이 의미하는 바는 전체 기본 키를 참조해야한다는 것입니다. "Order_Users_id"키를 삭제하면 데이터베이스를 만들 때 1005 오류가 발생합니다.
제 질문은 간단합니다.이 문제를 해결할 방법이 있습니까? 왜냐하면 지금 당장은 3 개의 다른 테이블에 언급 된 사용자 ID가 있습니다.
또는 제대로 이해하지 못하고 실제로 해당 데이터에 대해 다른 테이블을 쿼리하지 않아도됩니다.
편집 : 사용자가 식별하는 사용자와 주문 간의 관계에 대해 나와 의견이 맞지 않는 것 같습니다.
사용자의 ID를 모른 채 개별 주문을 식별하는 방법을 알 수 없습니다. 주문이 완료되면 누군가가 피자를 배달해야합니다. 즉, 피자를 배달 할 장소를 알아야합니다. 해당 데이터는 사용자 테이블에 있습니다.따라서 Users_id는 단일 주문의 ID의 일부입니다.
어쨌든 나는 그것을 볼 수 있습니다. 내가 틀렸다면 이유를 설명하십시오.
EDIT 2 : 데이터베이스 측면에서 "신원"개념을 명확히하기 위해 a_horse_with_no_name 덕분에 지금은 내 논리의 오류를 봅니다. 정보는 주석에서 찾을 수 있습니다.
'Users_id'는 '주문'의 기본 키의 일부로해서는 안됩니다. – SLaks
@SLaks : 그것은 식별 관계입니다. 이는 기본 키의 일부 여야 함을 의미합니다. 안 그래요? – KdgDev
@slaks가 맞습니다. KdgDev는 주문을 어떻게 식별합니까? '주문 ID '에 의해, 그것은 아닌가요? 그러면 PK 식별자로'order id '만 필요합니다. – danihp