Php 将对象详细信息表添加到推进

Php 将对象详细信息表添加到推进,php,mysql,propel,Php,Mysql,Propel,我正试图从我自己的伪ORM转向使用Propel(因为我以前的代码实际上是活动记录),并努力寻找“最佳”方法来解决由变化和固定属性组成的类的问题 这是一个游戏,我在地图上有区域,可以在整个游戏中更改所有者,因此我需要在区域表中存储游戏id(因为可以同时进行多个游戏)和当前所有者,但我还需要引用区域名称、是否可以在那里招募、起始所有者等内容。;所有这些都是该区域的固定值,在游戏内或游戏之间不会改变 例如,“肯特”地区最初可能为英国人所有,但也可能被法国人占领,但它总是被称为“肯特”,你可以随时在那里

我正试图从我自己的伪ORM转向使用Propel(因为我以前的代码实际上是活动记录),并努力寻找“最佳”方法来解决由变化和固定属性组成的类的问题

这是一个游戏,我在地图上有区域,可以在整个游戏中更改所有者,因此我需要在区域表中存储游戏id(因为可以同时进行多个游戏)和当前所有者,但我还需要引用区域名称、是否可以在那里招募、起始所有者等内容。;所有这些都是该区域的固定值,在游戏内或游戏之间不会改变

例如,“肯特”地区最初可能为英国人所有,但也可能被法国人占领,但它总是被称为“肯特”,你可以随时在那里招募,而且它总是更大国家“英格兰”的一部分

我可以看到的选项有:

  • 有一个lookup.ini文件或数据库表不受控制 在主区域表中将名称等作为字段
  • 将“详细信息”表和“详细信息\u 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和区域名称是非规范化的。我一定没有看到与您看到的相同的数据库结构。我认为你问题的关键在于你所看到的“固定”和“变化”属性之间的区别。我真的还是不明白你的问题。也许看看现在是怎么做的会有帮助,这样我就可以展示相同的数据库结构如何用于推进。你让我想到我可能不想在正在进行的游戏中改变任何东西,所以我尝试将所有内容都放在一个表中,并使用一个细节表进行初始化。这听起来像这可能是最好的。