БД Датапака

Теги:
 

Raize

новичок
... спроектирована отвратительно ...
с самого начала

[чея т прогнал, не датапака а серва .. ну ладно =) ]

в таблице ACCOUNTS
замеченные мной значения access_level - от 0 до 200 . зачем там тип поля int(11) ?
IP адрес, приводя в виде integer занимает 8 симвоов. зачем поле lastIP char - varchar(20) надо char(8)
в таблице ARMOR
тип поля - item_id с int(11) смело меняем mediumint(8) и так со всеми таблицами вещей (etcitem, weapons)
типы поле material, crystal_type можно спокойно стаивить tinyint(3) и выносить воможные значения константами в коде.
типы полей crystallizable и sellable - вообще полный изврат. зачем тип boolean конвертировать в varchar(5) ???boolean на то и boolean, чтобы занимать ОДИН байт.

ладно, возьмем таблички побольше
NPC .
разве нельзя было полю class быть не varchar(40), а tinyint(4) ?? вынести идешники в сорцах в виде констант и пихать только числа . зачем строки ? строки компьютеру не нужны, они нужны только человеку . пожтому для внутреннего использования делать такие поля .. вы меня извините ....
значения поля IsUndead вуглядят как 0 и 1, то есть явный булеан . тем не менее, чья-то светлая голова сделала этог поле как int(11) ...
мне кажется, что поле SEX (вообще лучше назвать Gender) можно сделать булевым в крайнем случае tinyint(1),зачем там varchar(6) не понятно
зачем поле type делать как varchar(20) , его тоже надо вынести как константы в сорцах и заполнять идешниками. зачем там строки ???

в общем так со всем, а обо всем говорить смысла нет, если везде одинаково .
 

Raize

новичок
на вскидку, примерно так ...

###########################################################################
#

#



DROP TABLE IF EXISTS #TBL_ACCOUNTS#;
CREATE TABLE #TBL_ACCOUNTS# (
acc_id mediumint(8) UNSIGNED NOT NULL auto_increment,
acc_username varchar(32) NOT NULL,
acc_password varchar(32) NOT NULL,
acc_lastactive int(11) NOT NULL DEFAULT 0,
acc_access tinyint(3) NOT NULL DEFAULT 0,
acc_lastip char(8) NOT NULL DEFAULT '0',
PRIMARY KEY (acc_id),
KEY (acc_username)
) TYPE = #V_DBTBLT# CHARACTER SET #V_DBCHST#;


DROP TABLE IF EXISTS #TBL_ARMOR#;
CREATE TABLE #TBL_ARMOR# (
ait_id mediumint(8) UNSIGNED NOT NULL auto_increment,
ait_price int(11) NOT NULL DEFAULT 0,
ait_name varchar(64) NOT NULL DEFAULT '',
ait_bodypart tinyint(1) NOT NULL DEFAULT 0,
ait_crystallizable tinyint(1) NOT NULL DEFAULT 0,
ait_crystaltype tinyint(3) NOT NULL DEFAULT 0,
ait_crystalcount tinyint(5) NOT NULL DEFAULT 0,
ait_weight tinyint(1) NOT NULL DEFAULT 0,
ait_meterial tinyint(3) NOT NULL DEFAULT 0,
ait_avoidmodify tinyint(1) NOT NULL DEFAULT 0,
ait_durability tinyint(3) NOT NULL DEFAULT 0,
ait_pdef tinyint(5) NOT NULL DEFAULT 0,
ait_mdef tinyint(5) NOT NULL DEFAULT 0,
ait_mpbonus tinyint(5) NOT NULL DEFAULT 0,
ait_sellable tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (ait_id)
) TYPE = #V_DBTBLT# CHARACTER SET #V_DBCHST#;


DROP TABLE IF EXISTS #TBL_BOXACCESS#;
CREATE TABLE #TBL_BOXACCESS# (
ba_spawn mediumint(8) UNSIGNED NOT NULL DEFAULT 0,
ba_charname varchar(32)
) TYPE = #V_DBTBLT# CHARACTER SET #V_DBCHST#;


DROP TABLE IF EXISTS #TBL_BOXES#;
CREATE TABLE #TBL_BOXES# (
box_id mediumint(8) UNSIGNED NOT NULL auto_increment,
box_spawn mediumint(8) UNSIGNED NOT NULL DEFAULT 0,
box_npcid mediumint(8) UNSIGNED NOT NULL DEFAULT 0,
box_itemid mediumint(8) UNSIGNED NOT NULL DEFAULT 0,
box_count mediumint(8) UNSIGNED NOT NULL DEFAULT 0,
box_enchant tinyint(2) NOT NULL DEFAULT 0,
box_drawer varchar(32) NOT NULL DEFAULT '',
PRIMARY KEY (box_id)
) TYPE = #V_DBTBLT# CHARACTER SET #V_DBCHST#;


DROP TABLE IF EXISTS #TBL_CASTLE#;
CREATE TABLE #TBL_CASTLE# (
cas_id mediumint(8) UNSIGNED NOT NULL auto_increment,
cas_siege_date int(11) NOT NULL DEFAULT 0,
cas_siege_day tinyint(1) NOT NULL DEFAULT 0,
cas_siege_hour tinyint(2) NOT NULL DEFAULT 0,
cas_tax tinyint(3) NOT NULL DEFAULT 0,
cas_treasure tinyint(3) NOT NULL DEFAULT 0,
cas_name varchar(32) NOT NULL DEFAULT ''
PRIMARY KEY (cas_id)
) TYPE = #V_DBTBLT# CHARACTER SET #V_DBCHST#;


DROP TABLE IF EXISTS #TBL_CASTLE_DOOR#;
CREATE TABLE #TBL_CASTLE_DOOR# (
cd_id mediumint(8) UNSIGNED NOT NULL auto_increment,
cd_castle mediumint(8) UNSIGNED NOT NULL DEFAULT 0,
cd_x int(11) UNSIGNED NOT NULL DEFAULT 0,
cd_y int(11) UNSIGNED NOT NULL DEFAULT 0,
cd_z int(11) UNSIGNED NOT NULL DEFAULT 0,
cd_hp tinyint(5) NOT NULL DEFAULT 0,
cd_pdef tinyint(5) NOT NULL DEFAULT 0,
cd_mdef tinyint(5) NOT NULL DEFAULT 0,
cd_name varchar(24) NOT NULL DEFAULT '',
PRIMARY KEY (cd_id),
KEY (cd_castle)
) TYPE = #V_DBTBLT# CHARACTER SET #V_DBCHST#;


DROP TABLE IF EXISTS #TBL_CASTLE_DOOR_UPG#;
CREATE TABLE #TBL_CASTLE_DOOR_UPG# (
cdu_door mediumint(8) UNSIGNED NOT NULL DEFAULT 0,
cdu_hp tinyint(5) NOT NULL DEFAULT 0,
cdu_pdef tinyint(5) NOT NULL DEFAULT 0,
cdu_mdef tinyint(5) NOT NULL DEFAULT 0,
PRIMARY KEY (cdu_door)
) TYPE = #V_DBTBLT# CHARACTER SET #V_DBCHST#;


DROP TABLE IF EXISTS #TBL_CASTLE_GUARD#;
CREATE TABLE #TBL_CASTLE_GUARD# (
cg_id mediumint(8) UNSIGNED NOT NULL auto_increment,
cg_clan mediumint(8) UNSIGNED NOT NULL DEFAULT 0,
cg_x int(11) UNSIGNED NOT NULL DEFAULT 0,
cg_y int(11) UNSIGNED NOT NULL DEFAULT 0,
cg_z int(11) UNSIGNED NOT NULL DEFAULT 0,
cg_hp tinyint(5) NOT NULL DEFAULT 0,
cg_mp tinyint(5) NOT NULL DEFAULT 0,
cg_patk tinyint(5) NOT NULL DEFAULT 0,
cg_pspd tinyint(5) NOT NULL DEFAULT 0,
cg_pdef tinyint(5) NOT NULL DEFAULT 0,
cg_matk tinyint(5) NOT NULL DEFAULT 0,
cg_mspd tinyint(5) NOT NULL DEFAULT 0,
cg_mdef tinyint(5) NOT NULL DEFAULT 0,
cg_magery tinyint(5) NOT NULL DEFAULT 0,
cg_name tinyint(5) NOT NULL DEFAULT 0,
cg_hpctrl tinyint(1) NOT NULL DEFAULT 0,
cg_mpctrl tinyint(1) NOT NULL DEFAULT 0,
cg_patkctrl tinyint(1) NOT NULL DEFAULT 0,
cg_pspdctrl tinyint(1) NOT NULL DEFAULT 0,
cg_pdefctrl tinyint(1) NOT NULL DEFAULT 0,
cg_matkctrl tinyint(1) NOT NULL DEFAULT 0,
cg_mspdctrl tinyint(1) NOT NULL DEFAULT 0,
cg_mdefctrl tinyint(1) NOT NULL DEFAULT 0,
cg_template int(11) NOT NULL DEFAULT 0,
cg_group varchar(32) NOT NULL DEFAULT '',
PRIMARY KEY (cg_id)
) TYPE = #V_DBTBLT# CHARACTER SET #V_DBCHST#;


DROP TABLE IF EXISTS #TBL_CASTLE_GUARD_SKILLS#;
CREATE TABLE #TBL_CASTLE_GUARD_SKILLS# (
cgs_npcid mediumint(8) UNSIGNED NOT NULL DEFAULT 0,
cgs_skill mediumint(8) UNSIGNED NOT NULL DEFAULT 0,
cgs_level tinyint(3) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (cgs_npcid, cgs_skill, cgs_level)
) TYPE = #V_DBTBLT# CHARACTER SET #V_DBCHST#;
 
+
-
edit
 

benoise

новичок
Вобщем ты прав.... но БД создавалась очень гибкой и простой для доступа.....и, витоге, осталось много зарезирвированного места, IMHO.....

Тот же access_level возможно планировался использоваться побитно.....
IP адрес, возможнол, оставляли под IPv6 ;)
item_id int(11) "..смело меняем mediumint(8).." оставили для совместимости с другими БД.....

Ну короче и т.д....
Проектировал то не один человек, а команда, им виднее было, что закладывать, а то, что она раздуеться не на 2Мб, а на 11 - фигня....
 

Raize

новичок
не только в объеме дело, но и в скорости доступа: чтения и записи ...
ну да ладно, в общем я так и думал .
короче, если есть интерес у кого-то этим заняться (в смысле подкорректировать базу), могу полностью закончить структуру - дописать все таблицы.
проблема в том, что тут простым апдейтом структуры таблиц не обойдешься, надо править исходники.
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru