Database design 如何在CakePHP中实现设备系统

Database design 如何在CakePHP中实现设备系统,database-design,cakephp,Database Design,Cakephp,我正试图创建一个基于CakePHP的网络游戏,主要是为了练习和娱乐,但在试图找出一个设备系统时遇到了一个难题 我有一个Items表,其中包含关于一个项目的所有可能信息,包括一个item_type字段,该字段包含一个整数值,该整数值确定项目类型,并由此确定要使用的项目信息 i、 e.item_type='1'表示该物品是一顶可以使用的帽子,这意味着只有权力、价格、奖金和要求是必要的信息。这一切都很好 我还设置了一个items_users HABTM表来存储每个玩家当前拥有的所有物品,这也很好 我想

我正试图创建一个基于CakePHP的网络游戏,主要是为了练习和娱乐,但在试图找出一个设备系统时遇到了一个难题

我有一个Items表,其中包含关于一个项目的所有可能信息,包括一个item_type字段,该字段包含一个整数值,该整数值确定项目类型,并由此确定要使用的项目信息

i、 e.item_type='1'表示该物品是一顶可以使用的帽子,这意味着只有权力、价格、奖金和要求是必要的信息。这一切都很好

我还设置了一个items_users HABTM表来存储每个玩家当前拥有的所有物品,这也很好

我想弄清楚的是设备系统是如何工作的。我首先想到的是装备表,例如:

    CREATE TABLE `aevum_tf`.`equips` (
`id` INT NOT NULL ,
`user_id` INT NOT NULL ,
`hat_id` INT NOT NULL ,
`wep_id` INT NOT NULL ,
`offhand_id` INT NOT NULL ,
`pants_id` INT NOT NULL ,
`acca_id` INT NOT NULL ,
`accb_id` INT NOT NULL ,
`accc_id` INT NOT NULL ,
`shirt_id` INT NOT NULL ,
`created` DATETIME NOT NULL ,
`modified` DATETIME NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`user_id`
)
) ENGINE = InnoDB 
使用这样的系统的唯一问题是CakePHP不支持模型的多个外键

有人对如何实施这样一个系统有什么想法吗

编辑现有HABTM项目表。\u用户用于存储用户当前拥有的项目。每次用户获取新项目时,其id和用户id都存储在items\u users表中。我只是想弄清楚如何实现一个设备系统

不支持多个外键,我的意思是CakePHP本机不支持来自另一个表中一个表的多个外键。我的示例equips表有8个外键,所有外键都指向项目id


请参阅:

我发现HABTM关系最适合于简单的关系,而不是您上面描述的复杂关系。HABTM关系的思想是使联接表几乎不可见,这样就不必维护额外的外键。它适用于简单的情况

在您的例子中,您有一个equips表,它将连接到系统的所有其他方面。在设计中,您需要一个起点。我想象“用户”将是这个起点,用户将拥有许多装备。您可以将用户限制为只有一个设备,这几乎有助于将用户和设备表合并为单个设备

在任何情况下,您都需要从定义规则开始

用户->手机->装备 装备->归属->用户

根据您的数据库设计,看起来将建立以下关系。 装备->物品->帽子 装备->行李->裤子 装备->归属->Wep Wep->HasMany->Equipmes

为了构建最好的应用程序,我的建议是构建每个可能的关系,并从每个视图查看结果数据集

$this->User->recursive = 2; 
pr($this->User->find("first");
从那里,我将重新设计表格,以获得一个外观良好、有意义的结构。然后修剪掉不必要的关系

还要花一些时间研究绑定和解除绑定模型。一旦数据库设计稳定,这将允许您更有效地自定义数据和关系


希望这有点帮助

我发现HABTM关系最适合于简单的关系,而不是你上面描述的复杂关系。HABTM关系的思想是使联接表几乎不可见,这样就不必维护额外的外键。它适用于简单的情况

在您的例子中,您有一个equips表,它将连接到系统的所有其他方面。在设计中,您需要一个起点。我想象“用户”将是这个起点,用户将拥有许多装备。您可以将用户限制为只有一个设备,这几乎有助于将用户和设备表合并为单个设备

在任何情况下,您都需要从定义规则开始

用户->手机->装备 装备->归属->用户

根据您的数据库设计,看起来将建立以下关系。 装备->物品->帽子 装备->行李->裤子 装备->归属->Wep Wep->HasMany->Equipmes

为了构建最好的应用程序,我的建议是构建每个可能的关系,并从每个视图查看结果数据集

$this->User->recursive = 2; 
pr($this->User->find("first");
从那里,我将重新设计表格,以获得一个外观良好、有意义的结构。然后修剪掉不必要的关系

还要花一些时间研究绑定和解除绑定模型。一旦数据库设计稳定,这将允许您更有效地自定义数据和关系


希望这有点帮助

请澄清“不支持多个外键”。您可以拥有任意数量的外键,可能只是不在HABTM表中。请澄清“不支持多个外键”。你可以有你想要的任意多的外键,也许只是不在HABTM表中。是的,我想不出任何其他简单的方法,没有一个非常复杂的项目来装备关系。我可能会将items表拆分为不同的项目类型组,看看它是如何工作的。是的,我想不出任何其他简单的方法,没有非常复杂的项目来装备关系。我可能会将items表拆分为不同的项目类型组,看看这是如何工作的。