2012-01-16 8 views
4

私が尋ねる理由は、MySQLが現在サポートしていない特定のCHECK制約を使用したいということです。このタイプの制約がないと、アプリケーションコードがデータベースのより多くの責任を引き継ぐので、外部キーと参照整合性を使用する理由は全体的に減少するようです。「ダム」データストア以外の目的でMySQLを使用することに利点はありますか?

「ダム」データモデルを作成し、すべての参照整合性チェックをアプリケーションコード内のレイヤーに移動すると、参照整合性エラーがアプリケーションでトラップされるのではなく、テストが潜在的に簡単になる可能性があります。 db。また、テストの前に必ずしも完全に完了する必要はないので(新しいモジュールの開発をスピードアップする可能性があります)

したがって、MySQLで '適切な'データモデルを採用し、外部キーと 'ON UPDATE CASCADE'ステートメントなどを保持することに他の利点がありますか?

または、MySQLを捨てて別のものに移動する必要がありますか?

ありがとうございます!

+1

...それがうまくいかない時にクリーンアップするためにあなたのデータとあなたの混乱です。 – newtover

+0

@newtoverもちろん、彼らは異なっています - 我々は検証をすることができないときにRIを使う利点は見られませんが、アプリケーションにすべて入っていれば両方を持つことができます... – Bendos

+1

あなたがコミットしている(ビールのように)無料のソフトウェアを使用するには、[PostgreSQL](http://www.postgresql.org/docs/8.1/static/ddl-constraints.html)を検討しましたか? –

答えて

7

デベロッパーの中には、データベース内にビジネスロジックを持たないもの、つまりダムのデータストアを提唱するものがあります。それは間違いなく有効な戦略です。

制約(および他のビジネスロジック)をデータベースから移動することについて懸念しているのは、どこにでも制約を適用することが難しいことです。すべての単一のアプリケーション内のすべての開発者がその制約に違反する可能性があります。 DBAは助けてもいけません。

私は、これらのルールをデータベース自体に持たせる方向に傾いています。

+7

Tom Kyte(Oracle Expert)は、「*あなたのアプリケーションは唯一のものではなく、そのデータを使用する最後のものではない」*(そのデータが重要である場合) –

+0

ありがとう@DOK、私はあなたが正しいことを知っていますが、おそらくDBAが開発者とは異なる人物だと考えるのが一般的になっています...私の経験(小さなプロジェクトでは、)彼らは同じ人であり、アプリケーションと同じようにデータベースを掘り下げることができます:) – Bendos

0

はい、MySQLでサポートされていない機能が必要な場合は、別のものに移動することができます。

2

あなたは、単一の行テーブルの

  • シングル値の列挙型
  • それは不便だが、ではない最後にトリガー

  • FK他の方法

    • にチェック制約をエミュレートすることができます世界。

      とにかくすべての制約をアプリケーションで行うことはできません。一意?ゼロサムチェック(例えば、アカウントが無効になる前に残高=ゼロ)。

      それは私が参照整合性がわずかに検証制約とは異なり考える

  • +0

    こんにちは@ gbn、あなたのコメントのおかげで。いくつかの妥当性検査ではトリガーを使用することを検討しましたが、実際のCHECKと比較していつものように思えました。 dbが独自の整合性を維持していない場合は、孤立したレコード、更新の異常などのリスクを認識していますが、完全に削除することではなく、別のレイヤーに移動するだけです。 DOKへのコメントで述べたように、DBAは開発者であることがよくあります。 – Bendos

    関連する問題