我正在开发一个HTML5多人游戏,我在表格“关键字”和“模型”之间有m:n关系,如下图所示:
keyword.id
和model.id
是auto_increment unsigned int,keyword.keyword
是唯一索引。
为了提高效率,我正在寻找一种管理关系的方法。琐碎的方式是:
timesCount
roundCount
和model_has_keyword
insert into keyword
和insert into model_has_keyword
但是随着越来越多的用户同时玩,我担心这种琐碎的方式会变得太慢。那么最有效的方法是什么?
在StackOverflow上搜索时,我已经弄清了两个想法,但我认为它们都不符合我的需求。
INSERT INTO table ON DUPLICATE KEY UPDATE col=val
INSERT INTO
,我需要触发另一个INSERT INTO
语句以插入表keyword
和model_has_keyword
REPLACE
语句:如果我替换table关键字中的记录,则为id
分配下一个自动增量值,以便表model_has_keyword
的引用丢失。 由于我不是专家,如果我在这里误解了某些内容,请纠正我。
答案 0 :(得分:3)
您需要检查关系是否存在,然后插入/更新。
A.-在try块中包含INSERT查询,如果出现错误,请进行更新查询。当关系不存在时,这将保存所有检查...
B.-使所有INSERT ON DUPLICATE UPDATE。这与“A”中的完全相同,但您不必担心异常。
绝对是你的第二个想法是绝对错误的。
我不会创建表关键字,因为您只需要关键字本身...然后我会像这样定义我的model_has_keyword:
CREATE TABLE model_has_keyword (
model_id INT NOT NULL,
keyword VARCHAR(50) NOT NULL,
timesCount INT NOT NULL,
roundCount INT NOT NULL,
PRIMARY KEY (model_id,keyword)
);
并像这样更新:
INSERT INTO model_has_keyword
(model_id,keyword,timesCount,$myIntValue)
VALUES
($model_id,$keyword,0,0)
ON DUPLICATE KEY UPDATE
timesCount=timesCount+1,roundCount=roundCount + $myIntValue