P粉3216766402023-09-06 12:42:54
상장됩니다affiliate_sales
更改为 VARCHAR(100)
.
만약 transaction(_id)
的外键,那么它不需要是 VARCHAR(2000)
이라면 어차피 100자를 넘는 문자열을 담을 수 없기 때문입니다.
이 작업을 수행하기 전에 현재 열에 100자를 초과하는 문자열이 없는지 확인하세요.
댓글에 답하기:
열에 "배열"(예: 쉼표로 구분된 목록이 있는 문자열)을 저장할 계획이라면 어쨌든 해당 배열에 외래 키를 생성할 수 없다는 점을 이해해야 합니다. 외래 키에는 테이블의 행과 값을 transaction
연결하는 열이 필요합니다. 외래 키 제약 조건을 추가하면 해당 열에 하나의 ID만 저장할 수 있습니다.
affiliate_stats
와 affiliate_stats
和 transaction
사이에는 실제로 다대다 관계가 있는 것 같습니다. 다대다 관계를 모델링하려면 세 번째 테이블이 필요합니다.
P粉1470452742023-09-06 00:41:33
varchar(2000)
2000자를 저장하지만 각 문자가 반드시 1바이트일 필요는 없습니다. a, 1 및 ?와 같은 간단한 유럽 문자는 모두 1바이트입니다. 그러나 ü 또는 å 또는 َََُِِّْ는 여러 바이트를 차지합니다.
단, 꼭 그럴 필요는 없습니다. 키는 100자를 초과할 수 없습니다. 기본 키는 varchar(100)
이므로 외래 키는 100자를 초과할 수 없습니다.
그러나 이 열에는 서로 다른 두 가지 유형의 데이터를 저장하려는 것 같습니다. 하나는 특정 배열 유형이고 다른 하나는 외래 키입니다. 당신은 할 수 없습니다. 외래 키 는 각 값에 일치하는 기본 키 값이 있는지 확인하세요.
대신 자동 증가 기본 키를 사용하여 테이블을 서로 연결하세요. 더 간단하고 빠르며 저장 공간을 덜 사용하고 모호하지 않으며 변경되지 않습니다.
두 테이블 모두의 기본 키로 새 열을 추가합니다. 그런 다음 인용해 보세요.
한 열에 여러 키를 저장할 수 없습니다. MySQL은 각 외래 키가 일치하는 기본 키를 가지고 있는지 확인할 수 있어야 하며, 이 키가 정확히 동일한지 확인해야만 이를 수행할 수 있습니다.
대신, 각 제휴_통계 행이 여러 제휴_판매에 해당하는 경우 조인 테이블이 필요합니다. 이를 일대다 관계라고 합니다. Affiliate_stats의 한 행은 많은 Affiliate_sales와 관련되어 있습니다.
으아악이제 제휴_통계 행에 추가하려는 각 제휴 판매에 대해 제휴_통계 판매에 행을 삽입하세요.
으아악판매 및 통계 데이터는 이 테이블을 조인하여 연결됩니다. 예를 들어, 100개 단위의 판매 통계를 보고 싶은 경우입니다.
으아악처음에는 조금 어렵지만 매우 강력합니다. 이것이 관계형 데이터베이스가 작동하는 방식입니다.