2

如果一个人有一个被许多不同代码使用的数据库,那么在整个过程中传播数据库更改的最实用的过程是什么?

我有一个我不断“发展”的个人 mysql 数据库。但是,我也有很多 PHP 代码已经建立,可以在这个数据库中使用特定的列名。除了在整个代码中手动查找/替换列名之外,是否有既定的方法/方式/流程来更改列名并在整个代码中传播?

从我有限的观点来看,我想它可能需要从等式的语言方面来处理,即,可能是某种类型的扩展功能,比如 PDO。

也许只是在代码开头将当前数据库列名称定义为变量的“缓冲区”层是最简单的方法?

4

2 回答 2

4

最好的做法是分离数据的持久化从这些数据在您的应用程序中的使用方式。数据库的结构不应定义应用程序的结构。在您的应用程序中,您通过对象或定义的数组结构传递数据。在某个指定点,您将这些对象/数组存储到数据库中,因为您希望将它们持久化以供以后使用。为此,您需要定义一个点,将数据对象/数组放入数据库中,反之亦然。这意味着这一点是您引用特定于数据库的名称的唯一点。如果需要更改数据库模式,只需要更新处理数据库-对象转换的薄层即可;您不需要更新“整个应用程序”,因为应用程序的其余部分是指您定义的数据对象的命名。

这通常称为对象关系映射数据访问层和其他相关技术。

+----------+ +-----+ +---...
|          | |     | |
| Database <-> DAL | | rest of your app...
|          | |     | |
+----------+ +-----+ +---...

数据库结构和有形数据对象之间的转换只发生在 DAL 中。应用程序的其余部分只是与 DAL 对话以获取或存储数据对象,它不需要知道或关心数据库结构的确切外观。

于 2013-01-13T04:09:51.377 回答
0

deceze 是 100% 正确的,这是要走的路。这是一个 DAL 的示例。这将是一个为您与数据库交互并返回您期望的对象的函数,例如:

function GetUser($id,$lname="",$fname="") {
      if ($id != -1)
         $m = mysql_query("SELECT * FROM users WHERE id=$id");
      elseif ($lname != "" && $fname != "")
         $m = mysql_query("SELECT * FROM users where user_first_name='$fname' AND user_last_name='$lname'");
      elseif ($lname != "")
         $m = mysql_query("SELECT * FROM users where user_last_name='$lname'");
      elseif ($fname != "")
         $m = mysql_query("SELECT * FROM users where user_first_name='$fname'");
      if (!$m)
        return NULL;
      $r = mysql_fetch_row($m);
      $obj = new stdClass();
      $obj->id = $r[0];
      $obj->FirstName = $r[1];
      $obj->LastName = $r[2];
      return $obj;
}

返回的结果将为您提供一个与之交互的对象,您可以添加/更改并依赖它来不断获得您想要的结果。您只会更改此函数中的列名,而不是更改整个代码。

希望这有助于阐明他的答案。

于 2013-01-13T04:52:50.533 回答