我正在寻找关于如何优化表格的建议,所以我没有进行大量的连接。现在,我必须为一项技能执行3或4次连接,我的php将其转换为树形结构。任何人都可以给我提示如何减少连接,并建议任何方法来减少我正在使用的表的数量?我对游戏机制一无所知,我也不是一个优秀的数据库设计师。任何提示和/或建议都非常感谢。
统计:
use skilltree;
create table stats
(
id int not null auto_increment,
title varchar(28) not null,
rate int default null, # default value for number
txt varchar(38) default null, # allows stat to hold string value or number
increase int, # amount to increase every level up unless string
icon varchar(128), # path or url to icon, optional
position int not null, # position used for display
active int not null default 1, # is stat usable
primary key(id)
)
技能:
use skilltree;
create table skills
(
id int not null auto_increment, # id used for prereq 0 is root
specialty int not null,# id to the specialty it belongs to
title varchar(20) not null, # name of the skill
description text not null, # what the skill does
tiers int(5) not null default 1, # levels of advancement in skill, default 1, max 5
prereq int default null, # used as parent id, looks better than parent
icon varchar(128), # path or url to icon, shown in skill description view
image varchar(128) not null, # path or url to image, image of the stat
active int not null default 1, # if this skill is actve and needs to be added to the tree
primary key(id) # auto_increment key has to be primary key
);
奖金:
use skilltree;
create table skillbonuses
(
id int not null auto_increment,
skill int not null, # id of the skill bonus belongs to
stat int not null, # id of stat bonus applies to for this tier
tier int(5) not null, # level of stat bonus applies to
dependant int default 0, # dependant stat
bonus int not null, # bonus amount as a percent
primary key(id),
foreign key(skill) references skills(id),
foreign key(stat) references stats(id)
);
家属:
use skilltree;
create table skilldependants
(
id int not null auto_increment,
bonus int not null, # bonus that requires the check
numequals int, # value to check if number
txtequals varchar(38), # value check if stat is a string type
primary key(id),
foreign key(bonus) references skillbonuses(id)
);
答案 0 :(得分:1)
如果您的表格为normalized,那么您会发现许多查询涉及JOIN
或多个JOIN
。它们通常是保持表格良好状态的最有效方法,因为您不是重复数据。当您重复数据时,您可能会遇到麻烦。重复的数据越多,就越有可能被搞砸。复杂连接不会影响您的查询速度,因此唯一的潜在缺点是增加腕管综合征的风险。相反,较小的,更敏捷的表的另一种可能性是你最终得到一个表的巨大的野兽,在每一行重复多个值,并且 SLOW 强>
话虽如此,请阅读我所包含的链接并尝试理解它。具体来说,重点是,如果您有多个列(主键除外),它们显示在多个表中,您可以通过从其中一个表中删除它来标准化一点。同样地,如果你看几张桌子并意识到你永远不会打电话给另一张桌子,你可以期望将它们合并在一起并不会给你带来任何严重的问题。
然而,一眼就看出来,就像你一样。
话虽如此,你怎么能限制你写的这些查询的数量?
利用DRY原则。 AKA Don不要重复自己。如果您发现自己正在搜索代码以查找要在以后使用的查询,那么您将重复自己。
所有查询都应该在函数中。这样,当你想调用一个查询时,你实际上只是在调用一个函数。如果您的功能有详细记录,您会发现必须编写越来越少的查询。
希望这有帮助。