2

多くの異なるコードで使用されるデータベースがある場合、データベースの変更を全体に広めるための最も実用的なプロセスは何でしょうか。

私は継続的に「進化」している個人のmysqlデータベースを持っています。ただし、このデータベースで特定の列名を使用するためにすでに確立されているPHPコードもたくさんあります。コード全体で列名を手動で検索/置換する以外に、列名を変更してコード全体に広めるための確立された方法/方法/プロセスはありますか?

私の限られた見方からすると、方程式の言語側、つまり、PDOのようなある種の拡張機能からアプローチする必要があるかもしれないと思います。

おそらく、コードの先頭で現在のデータベースの列名を変数として定義する「バッファー」レイヤーが最も簡単な方法ですか?

4

2 に答える 2

4

最善の方法は、データの永続性を分離することですそのデータがアプリでどのように使用されるかから。データベースの構造は、アプリの構造を定義するものであってはなりません。アプリ内では、オブジェクトまたは定義された配列構造を介してデータを渡します。後で使用するためにそれらを永続化するため、指定された時点で、これらのオブジェクト/配列をデータベースに格納します。これを行うには、データオブジェクト/配列がデータベースに配置される1つの定義されたポイントがあり、その逆も同様です。つまり、このポイントは、データベース固有の名前を参照している唯一のポイントです。データベーススキーマを変更する必要がある場合は、データベースオブジェクト変換を処理するシンレイヤーを更新するだけで済みます。アプリケーションの残りの部分は定義されたデータオブジェクトの名前を参照するため、「アプリ全体」を更新する必要はありません。

これは通常、オブジェクトリレーショナルマッピングデータアクセス層、およびその他の関連技術として知られています。

+----------+ +-----+ +---...
|          | |     | |
| 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 に答える