Php ons使用字符串键。@Mjh我不知道我的问题是否清楚,但这种情况只涉及模块和对象。数据库中的所有其他记录(以及为所有对象创建的实际数据记录)都使用PKid列。例如,这可能是一个问题:对象可以将自己注册为页面对象的扩展。当前扩展链接到对象id,但是如果重新安

Php ons使用字符串键。@Mjh我不知道我的问题是否清楚,但这种情况只涉及模块和对象。数据库中的所有其他记录(以及为所有对象创建的实际数据记录)都使用PKid列。例如,这可能是一个问题:对象可以将自己注册为页面对象的扩展。当前扩展链接到对象id,但是如果重新安,php,mysql,database,database-design,Php,Mysql,Database,Database Design,ons使用字符串键。@Mjh我不知道我的问题是否清楚,但这种情况只涉及模块和对象。数据库中的所有其他记录(以及为所有对象创建的实际数据记录)都使用PKid列。例如,这可能是一个问题:对象可以将自己注册为页面对象的扩展。当前扩展链接到对象id,但是如果重新安装时对象id发生更改,我必须遍历所有这些类型的表以将id更新为新的。如果我使用对象名(永远不会改变),这永远不会出错。所有问题都是你自己回答的。你知道关系是如何建立的。您的问题在于所谓的“数据库重新安装”。由于数据库不是一些巨大的文本文件,“重


ons使用字符串键。@Mjh我不知道我的问题是否清楚,但这种情况只涉及模块和对象。数据库中的所有其他记录(以及为所有对象创建的实际数据记录)都使用PK
id
列。例如,这可能是一个问题:对象可以将自己注册为
页面
对象的扩展。当前扩展链接到对象id,但是如果重新安装时对象id发生更改,我必须遍历所有这些类型的表以将id更新为新的。如果我使用对象名(永远不会改变),这永远不会出错。所有问题都是你自己回答的。你知道关系是如何建立的。您的问题在于所谓的“数据库重新安装”。由于数据库不是一些巨大的文本文件,“重新安装”通常通过一个称为迁移然后播种的过程来完成。如果您正确地为数据播种(并使用主键
id
建立关系),那么显然您的问题就永远消失了。问题的另一部分是引用记录的难易程度——如果向记录中添加字符串唯一键,则也解决了该问题。现在,您所有的问题都解决了,尽管编写代码需要很长时间。如果您尝试建立基于文本字符串的关系,那么您必须意识到它实际上是不可变的,或者您必须在每个相关记录更新时更新它changed@Mjh我不确定我是否百分之百地理解你。的确,一旦我重新为数据库设定种子,我现在可以用正确的替换项替换原始备份中的错误值,然后将迁移的数据插入数据库。事实上,这就是我到目前为止一直在做的事情。我的数据库既包含由用户生成的数据填充的表,也包含或多或少是静态的核心数据。但是,该静态数据是在安装/设定种子时根据各种.ini文件中指定的设置、存在哪些模块文件夹等生成的。[…阅读下一条注释]
Function definition: GetObjectRecord($module, $object, $record)

ObjectManagement::GetObjectRecord("pagemanagement", "page", 17);
ObjectManagement::GetObjectRecord(4, 26, 17);