2

ACID の概念そのものについて混乱しています。
すべての参考文献/教科書は、ACID を、データの整合性を維持するためにデータベース システムが維持することが期待/要求される一連のプロパティとして説明しています。
しかし、ACID の C 部分、つまり一貫性は、実際にはデータベースの責任ではないようです。
一部の参考文献 (Silberschatz など) では、トランザクションのコード自体 (分離して実行された場合) がデータベースを一貫した状態のままにする、つまりトランザクション コードが正しいという意味で、これは DBMS ではなくアプリケーションのプログラマーの視点です。
また、他の参考文献では、「データベースを一貫した状態のままにする」のように説明が曖昧
です。では、どちらが正しいですか?

4

1 に答える 1

4

トランザクションでは、技術用語の一貫性は「すべての既知の整合性制約を満たす」ことを意味します。

定義により、整合性制約は dbms に対して宣言され、dbms によって強制されることが期待されます。なんで?アプリケーション プログラマーが責任を負っていた場合、すべてのアプリケーション プログラマーは、一貫した更新操作を構成するものについて異なる決定を下す可能性があるためです。

たとえば、あるアプリケーション プログラマーは、10,000 ドルを超えるすべての単価が誤りであると判断する場合があります。別のアプリケーション プログラマーは、12,000 ドルを超える単価はすべて誤りであると判断するかもしれませんが、11,000 ドルは有効な単価であると判断する場合があります。1 人のプログラマーの作品の単価は 11,000 ドルです。他の人はそれをエラーとして追い出します。

リレーショナル データベースは、単価に関する決定を一元化することで、この矛盾を解決します。この特定のケースでは、その決定は、"unit_price" 列の CHECK() 制約の形式で集中化される可能性があります。整合性制約が設定されると、すべての更新操作で "unit_price" 列の値が一貫したものになります。それは問題ではありません

  • アプリケーション プログラマーの数
  • 彼らがどれだけよく訓練されているか(またはどれだけ訓練されていないか)、
  • いくつの異なるアプリケーションがあるか、
  • どの言語で書かれているか、
  • 睡眠不足の DBA がコマンドライン コンソールから更新を実行しているかどうか。

これらのすべての更新操作では、"unit_price" 列を値に設定することは不可能であり、既知の整合性制約をすべて満たすことができません。つまり、これらの更新操作はすべて、既知の整合性制約をすべて満たす状態になります。それが一貫性の定義です。


  • リレーショナル モデルでは、整合性制約ビジネス ルールは同じことを意味します。1ビジネス ルールを別の意味で使用する人もいます。注意して読んで意味を判断する必要があります。

  • データが重要な場合、完全性制約 (またはビジネス ルール)をエンド ユーザーが制御できるようにすべきではありません。制約は、通常は単一の SQL ステートメントを使用して、DBA が簡単に変更できます。しかし、どのステートメントをいつ実行するかを知ることは、ほとんどのエンド ユーザーのスキル セットにはありません。

  • 一貫性正しいという用語には、 2 つの異なる意味があります。データベースの状態は、正しくなくても一貫している場合があります。CHECK() 制約の範囲内にある単価でも、価格が間違っている可能性や、人の名前のつづりが間違っている可能性があります。

  • リレーショナル モデルも SQL 標準も、特定の SQL 実装によって定義されているわけではありません。これらは特に、MySQL の動作によって定義されていません。これは、かろうじて SQL です。(解析されたが強制されていない CHECK 制約、GROUP BY を使用した不確定な結果、分析関数なし、バックティックでの非標準の引用など)


目の前にデータベース システムの概念があり、著者が「個々のトランザクションの一貫性を確保することは、トランザクションをコーディングするプログラマーの責任である」という言葉の意味を理解したいとしたら、これらの質問を自問するでしょう。

  • 問題のセクションを参照する正誤表はありますか?
  • 以前の版の ACID プロパティについて著者は何と言っていますか? 後期版では?
  • 作成者は、正しいトランザクション (正しいデータを持っている) と一貫したトランザクション (完全性制約に違反していないトランザクション ) を区別していますか?
  • 著者は、一貫性はプログラマーの責任であるといつも言っていますか? (私は、正確さはそうであり、一貫性はそうではないと言いたい.)
  • 著者はどのプログラマーについて話しているのですか? (Rails アプリを作成するアプリケーション プログラマー? ストアド プロシージャを作成する DBA? PostgreSQL のトランザクション サブシステムを作成するハードコア プログラマー?)
  • 著者は、一貫性はデータベース管理者の責任であるとは決して言いませんか?
  • 著者は、トランザクションの 4 つの ACID プロパティのうち、A、I、および D は dbms の責任であり、C はそうではないと言ったことはありますか? (彼はそうしないに違いない。)
  • 個々のトランザクションの一貫性は、データベースの一貫性とは異なりますか? 著者はそれについて他にどこで話していますか?

  1. 「データベースの集中管理は、データ管理者が整合性制約(ビジネス ルールとも呼ばれる)を定義し、DBA が実装できるようにすることで、このような問題を回避できる限り回避するのに役立ちます。更新操作が実行されます。」データベース システムの紹介、第 7 版、CJ Date、18 ページ。
于 2014-03-04T00:30:13.707 に答える