나는 HTML5 멀티 내가 한 게임을 개발하고있다 : 테이블 "키워드"및 "모델"과 N의 관계를 다음과 같은 이미지처럼 보여줍니다효율적인 삽입/MySQL의 m의 갱신 : N 관계는
keyword.id
및 model.id
은 auto_increment 부호없는 int이며 keyword.keyword
은 고유 색인입니다.
효율성을 위해 관계를 관리하는 방법을 찾고 있습니다. 사소한 방법은 다음과 같습니다
- 선택하면 키워드 이미
- 존재하는 경우 예 :
model_has_keyword
- 에서 갱신
timesCount
및roundCount
만약 번호 :insert into keyword
및
그러나의 증가와 insert into model_has_keyword
동시에 연주하는 사용자들, 사소한 방법이 너무 느려지는 것이 아닌가 걱정됩니다. 그래서 이것을하는 가장 효율적인 방법은 무엇입니까?
StackOverflow에서 검색하는 동안 두 가지 아이디어가 두드러졌지만 두 가지 모두 내 요구에 맞지 않는다고 생각합니다. INSERT INTO
처리 할 것
INSERT INTO table ON DUPLICATE KEY UPDATE col=val
경우에, 나는 두 테이블에keyword
및model_has_keyword
REPLACE
문을 삽입하는 또 다른INSERT INTO
문을 실행할 필요가있을 것이다 : 나는 테이블 키워드의 기록을 교체하는 경우,id
이 할당됩니다 다음 자동 증가 값을 사용하여 테이블model_has_keyword
에 대한 참조가 손실됩니다.
저는 전문가가 아니기 때문에, 여기에 뭔가 잘못 이해하면 제게 시정하십시오.
답장을 보내 주셔서 감사합니다! B에서 설명한 방식대로 구현하는 방법을 언급 해 주시겠습니까? 이것이 어떻게 작동해야할지 모르겠다. INSERT INTO 키워드 (키워드) VALUES ('myValue') 중복 키 업데이트에 대해 model_has_keyword.roundCount = model_has_keyword.roundCount + 1, model_has_keyword.timesCount = model_has_keyword.timesCount + myIntValue 중복 키가 검색되지 않으면 model_has_keyword에 삽입이 누락되었습니다. 중복 키가 있으면 예상대로 작동합니다. 마지막으로 중요 : 저장 프로 시저를 사용했거나 소스 (php/js)에서 쿼리 한 것이 었습니까? – grange
그러나 표 키워드는 필요하지 않습니다! – Amarnasan
감사합니다! 당신은 절대적으로 옳았지 만, 또 다른 m : n 관계에 대해서도 키워드 테이블이 필요하다고 언급하지 않았습니다. 따라서 키워드 중복 저장으로 이어질 수 있습니다. – grange