我们正在编写一个MMORPG并假设我们有以下表格。这location_dynamic_objects
是要大量查询和更新的表。如您所见position_x
,position_y
列location_id
和对象类型都是重复的。但是,如果我们规范化并使用连接,我们将为选定的数据应用额外的过滤器。我们计划将所有location_static_objects
ONCE 发送给客户,因此将它们与location_dynamic_objects
. 静态对象表示要渲染的不可移动数据,并在位置加载时向客户端发送一次。动态对象代表经常更新的数据,如玩家、火箭、小行星等,并不断发送给客户端,选择取决于客户端的位置和位置。我们的问题是我们应该放弃规范化来实现性能吗?
create table location_static_object_types (
location_static_object_type_id integer auto_increment primary key,
object_type_name varchar(16) not null
);
create table location_static_objects (
location_static_object_id integer auto_increment primary key,
location_static_object_type_id integer not null,
location_id integer not null,
position_x integer not null,
position_y integer not null
);
create table location_dynamic_object_types (
location_dynamic_object_type_id integer auto_increment primary key,
object_type_name varchar(16) not null
);
create table location_dynamic_objects (
location_dynamic_object_id integer auto_increment primary key,
location_dynamic_object_type_id integer not null,
object_native_id integer not null,
location_id integer not null,
position_x integer not null,
position_y integer not null
);