2016-12-16 7 views
0

私の質問は本当に簡単です:SQLチェック悪いですか?つまり、特にクライアントで実行できるチェックです。チェック制約は悪いですか?

これはおそらくHistoryの中で最も短い質問ですが、それは深刻な問題です。

+0

SQLチェックとは何ですか? 「テーブルから選択し、存在していない場合はチェックする」チェックのタイプを参照してください。 – Mjh

+0

@Mjh http://www.w3schools.com/sql/sql_check.asp – Asperger

+1

彼らは悪ではありません。もちろん、エンジンはそれらを強制しないので、[tag:mysql]では純粋に*装飾的です。あなたが信頼できるバックストップを持つ他のデータベースシステムでは、データを変更するためにどのクライアント(または管理ツール)が使用されたとしても、通常、悪ではなく良いものと見なされます。 –

答えて

5

チェック制約は最も確かにではなく、の悪です。

データベースにデータの整合性を維持することです。データの整合性のいくつかの側面は、列に入るデータを検証することによって維持されます。データベースは、これらのチェックのための適切な場所です。

私は実際には反対に論じるでしょう。データ整合性の検証でなければなりません。アプリケーション層ではありません。一意性など、アプリケーションレベルでは容易に維持できない制約があります。

2

CHECK CONSTRAINTを意味しますが、それにはMySQLというタグが付いていますが、これはサポートされていません。とにかく、check制約は、データを列に挿入する前にビジネス制約を検証することです(例:ageは100未満でなければなりません)。

はい、アプリケーション層で同じ検証を実行し、一度有効にしてからデータをDB層に渡すだけであれば、エンドユーザーに検証メッセージを送信するほうが賢明でしょう。そうすれば、あなたはDBへの往復を節約することができます。

+0

確かに。ユニークな制約でも同じことが言えますか?つまり、アプリケーション層が十分に書かれていれば、多くの制約を避けることができます。 – Asperger

+0

@Asperger、いいえ、「一意制約」ではありません。それは列が一意の値しか保持しないようにするためです。アプリレイヤーから、必ずしも同じことを確認するとは限りません。あなたはできる? – Rahul

+0

はい、それは100%有望ではありません。 – Asperger