Php 将对象详细信息表添加到推进
我正试图从我自己的伪ORM转向使用Propel(因为我以前的代码实际上是活动记录),并努力寻找“最佳”方法来解决由变化和固定属性组成的类的问题 这是一个游戏,我在地图上有区域,可以在整个游戏中更改所有者,因此我需要在区域表中存储游戏id(因为可以同时进行多个游戏)和当前所有者,但我还需要引用区域名称、是否可以在那里招募、起始所有者等内容。;所有这些都是该区域的固定值,在游戏内或游戏之间不会改变 例如,“肯特”地区最初可能为英国人所有,但也可能被法国人占领,但它总是被称为“肯特”,你可以随时在那里招募,而且它总是更大国家“英格兰”的一部分 我可以看到的选项有:Php 将对象详细信息表添加到推进,php,mysql,propel,Php,Mysql,Propel,我正试图从我自己的伪ORM转向使用Propel(因为我以前的代码实际上是活动记录),并努力寻找“最佳”方法来解决由变化和固定属性组成的类的问题 这是一个游戏,我在地图上有区域,可以在整个游戏中更改所有者,因此我需要在区域表中存储游戏id(因为可以同时进行多个游戏)和当前所有者,但我还需要引用区域名称、是否可以在那里招募、起始所有者等内容。;所有这些都是该区域的固定值,在游戏内或游戏之间不会改变 例如,“肯特”地区最初可能为英国人所有,但也可能被法国人占领,但它总是被称为“肯特”,你可以随时在那里
id | game_id | owner | turn_last_conquered | details_id | population
----|---------|-------|---------------------|------------|-----------
1 | 100 |England| 2 | 1 | 10
2 | 101 | France| 3 | 1 | 12
地区详情表
id | name | port | fortified | starting owner | starting population
----|------|------|-----------|----------------|--------------------
1 | Kent | 1 | 0 | England | 13
区域表中的两个条目对应不同游戏中的肯特。如果我将属性作为区域对象/表的一部分,那么如果我想在每个游戏中更改某个对象的名称,我必须更新所有受影响的行,而如果它位于一个单独的表中,那么我只需更新该行,更改就会传播。我自己的系统用必需的字段填充了Region对象,我正试图找到一种方法来绕过“RegionDetails”对象,但也许我不应该这样做。如果要使用多个表,并且要使用Prope(或其他活动记录库),那么每个表都必须有一个类。这几乎就是活动记录的定义。数据库中每行一个对象,每表一个类。只有问题是标准的,这并不意味着有标准的解决方案。将所有数据保存在同一个存储层是我第一次快速阅读的建议,但请注意,您的问题可能会引起讨论,然后将被关闭,因为它可能是自以为是的。还有另一个提示:首先推进。然后根据需要更改数据库设计。不要把这两种操作都混在一起。我一直都是这样做的。我不明白你有多困难。我只是将与区域(名称、所有者等)关联的所有数据放在区域表中。我不明白为什么他们会成为一个问题。你能帮我看看这种方法有什么问题吗?@Ben我可能对标准化感到不安,在查找表中包含其他细节似乎是一种“更好”的方法。如果我更改一个区域的名称,那么使用您的方法,我必须更新区域表中受影响的每个条目,而不仅仅是查找表。当然,这个更新会很容易…我真的不知道如何在同一个表中存储所有者id和区域名称是非规范化的。我一定没有看到与您看到的相同的数据库结构。我认为你问题的关键在于你所看到的“固定”和“变化”属性之间的区别。我真的还是不明白你的问题。也许看看现在是怎么做的会有帮助,这样我就可以展示相同的数据库结构如何用于推进。你让我想到我可能不想在正在进行的游戏中改变任何东西,所以我尝试将所有内容都放在一个表中,并使用一个细节表进行初始化。这听起来像这可能是最好的。