应用程序和数据库之间的奇异数据键?

时间:2009-11-30 20:28:58

标签: database field abstraction datakey

是否有一种范例可以在一个地方和一个地方更改数据密钥名称,并且应用程序和数据库都能正确处理它?<​​/ p>

我最近使用类常量来映射到数据库字段名称,但是 我仍然必须保持与原始数据库密钥对齐。

我的意思是,以PHP为例,我现在可以使用

$infoToUpdateUser[ User::FIELD_FIRST_NAME ]

这意味着当我在常量处更改​​它时,我不必搜索代码来更改对该字段的所有引用。

其中涉及的另一个领域是引用字段。由于一些早期糟糕的设计决策,我有例如这些类型的表:

(表名:primary_key)

  • cats:cat_id
  • dogs:dog_id
  • 鹦鹉:bird_id(记住,设计不佳,因此鹦鹉/ bird_id之间不匹配)
  • 蜥蜴:lizard_id

然后假设我有一系列更新记录的表单类。

  • AnimalForm
  • DogForm扩展AnimalForm
  • CatForm扩展了AnimalForm
  • ParrotForm扩展AnimalForm

现在我想使用父类AnimalForm中的更新函数更新SQL数据库中的记录,因此我不必在20个子类中复制代码。

但是我不知道一种推广更新查询的方法,所以目前每个子类都有一个idFieldName成员变量,而父类将它插入到查询中,比如

"UPDATE " . $this->table . " SET <data> WHERE " . $this->idFieldName

这样做似乎很草率但我现在想不出更好的解决方案。

是否存在将数据键名称链接在一起或抽象的设计模型或范例,以供数据库和应用程序共享作为参考?

1 个答案:

答案 0 :(得分:1)

您正在寻找的是一个对象关系映射层。

ORM通过将关系数据库映射到对象模型来分离数据访问与业务逻辑的关注点。由于ORM执行所有转换,如果您更改数据库表或列的名称,您只需告诉ORM一次,它将正确地将该更改应用于您的所有代码。

由于您表明您使用的是PHP,因此这里是PHP中的question that addresses ORM libraries。有关ORM技术的其他信息可以是found in Wikipedia