用于存储库存项目槽的数据库架构

Database schema for storing the inventory item slot

我正在做一个小型 Web 项目,我想在其中拥有像 RPG 游戏或射击游戏中的用户清单。我想让它尽可能简单。我想要实现的是存储物品的插槽,以便下次加载页面时,物品会保持在正确的位置 position.Items 将有固定的位置,例如,一个步枪插槽,一个头盔插槽.

我应该为此创建什么样的关系和数据库模式?我正在使用 MySQL

到目前为止我有以下架构:

我假设有些物品可以占据几个位置之一。我会创建几个新的 tables:

create table slots (
  id int primary key,
  name varchar(20) -- 'headgear', 'rifle', 'coin pocket'
);

create table inventory_slot (
  item_id int not null,
  slot_id int not null,
  primary key (item_id, slot_id),
  foreign key (item_id) references inventory_item(id),
  foreign key (slot_id) references slots(id)
);

每个可能的库存项目在 inventory_slot 中至少有一行,如果允许在多个位置持有同一项目,则同一项目在 inventory_slot 中可能有多行给定用户的库存。

然后修改用户库存table:

create table user_inventory (
  id int primary key,
  user_id int not null,
  item_id int not null,
  slot_id int not null,
  unique key (user_id, slot_id),
  foreign key (user_id) references user(id),
  foreign key (item_id, slot_id) references inventory_slot(item_id, slot_id)
);  

由于 unique key,每个用户每个槽位只允许一个项目。这些项目必须引用 inventory_slot 中的一行,以便您知道它们只能存放在已指定为给定项目正常的插槽中。