不知道一些网络游戏的数据库是如何设计的。
我目前的想法是多个表来存储玩家的数据。分别有基本数据,技能数据,物品数据
如下的 TCharData 定义假设为人物的数据结构: //物品数据
TItemData = record
Name : String[20];
Count : Integer;
UpGrade : Byte;
MaxDurability : Word;
CurDurability : Word;
end;
//技能数据
TMagicData = record
Name : String[20];
Level : Byte;
Exp : Integer;
end;
//人物数据
TCharData = record
Name : String[20];
LastDate : String[12];
CreateDate : String[12];
Sex : Byte;
MapId : byte;
Mapx : word;
Mapy : word;
MaxLife : Integer;
CurLife : Integer;
MaxMagic : Integer;
CurMagic : Integer;
//背包物品
HaveItem : array [0..30 - 1] of TItemData;
//技能数据
HaveMagic : array [0..20 - 1] of TMagicData;
end;
MSSQL 数据表设计:
Char_Basic 表(人物的基本数据)字段:
ID
Name
LastDate
CreateDate
Sex
...Item_Data 表 字段:
ID
Char_ID //这个对应 Char_Basic 表的ID
Pos //这个表示人物的第几个物品框
Name
Count
UpGrade
MaxDurability
CurDurabilityMagic_Data 表 字段:
ID
Char_ID //这个对应 Char_Basic 表的ID
Pos //这个表示人物的第几个技能
Name
CurLevel
Exp
请问:Delphi 如何通过SQL语句将数据里的数据读取到 TCharData 结构中 和 将 TCharData 结构的数据分别写入几个表内 with ADOQuery do
begin
Sql.Clear;
SQL.Add(?????);
end;
我目前的想法是多个表来存储玩家的数据。分别有基本数据,技能数据,物品数据
如下的 TCharData 定义假设为人物的数据结构: //物品数据
TItemData = record
Name : String[20];
Count : Integer;
UpGrade : Byte;
MaxDurability : Word;
CurDurability : Word;
end;
//技能数据
TMagicData = record
Name : String[20];
Level : Byte;
Exp : Integer;
end;
//人物数据
TCharData = record
Name : String[20];
LastDate : String[12];
CreateDate : String[12];
Sex : Byte;
MapId : byte;
Mapx : word;
Mapy : word;
MaxLife : Integer;
CurLife : Integer;
MaxMagic : Integer;
CurMagic : Integer;
//背包物品
HaveItem : array [0..30 - 1] of TItemData;
//技能数据
HaveMagic : array [0..20 - 1] of TMagicData;
end;
MSSQL 数据表设计:
Char_Basic 表(人物的基本数据)字段:
ID
Name
LastDate
CreateDate
Sex
...Item_Data 表 字段:
ID
Char_ID //这个对应 Char_Basic 表的ID
Pos //这个表示人物的第几个物品框
Name
Count
UpGrade
MaxDurability
CurDurabilityMagic_Data 表 字段:
ID
Char_ID //这个对应 Char_Basic 表的ID
Pos //这个表示人物的第几个技能
Name
CurLevel
Exp
请问:Delphi 如何通过SQL语句将数据里的数据读取到 TCharData 结构中 和 将 TCharData 结构的数据分别写入几个表内 with ADOQuery do
begin
Sql.Clear;
SQL.Add(?????);
end;
比如一个表的: Str := 'select * from [Char_Basic] where Name = ''' + szCharName+ ''';';
with ADOQuery do
begin
Close;
Sql.Clear;
SQL.Add(Str);
Open;
end;
CharData.LastDate := Copy (DateToStr(ADOQuery.FieldByName('LastDate').AsDateTime), 1, 12);
CharData.MaxMagic := ADOQuery.FieldByName('MaxMagic').AsInteger;但是物品和技能的数据在其他的表。难道要 重新读另一个表?如何读完一个表再读另一个的话。效率如何?
select a.LastDate, b.MaxMagic from Char_Basic a, Item_Data b
where a.id = 5 and b.id = 5
分几个sql读取,分别用程序把不同记录-字段的值赋给不同的结构-域
写就是 反向生成几个sql语句,可以一次性提交不过,如果由我来设计,我会把这些不同性质的属性放到一个大 name-value 表
在程序里,也是一个大 Tstringlist 好了
扩展性会无限