2016-03-30 20 views
1

私は、数値範囲を求めるDDLコードを書こうとしていますが、私がインターネット上で探しているものを見つけることができません。 は、これまでのところ私が持っている:SQL DDL番号の範囲

私のバリケードがある
create table Section (
    c# numeric(10), 
    se# numeric(10), 
    emp# numeric(5), 
    time numeric(5), 
    constraint Section_PK primary key (c#, se#), 
    constraint Section_FK_Course foreign key (c#) references Course, 
    constraint Section_FK_Employee foreign key (emp#) references Employee 
) 

、同時に、C#は内であればながら、私は、「管理番号」は40から60に任意の数で持っている必要があり、および20をデフォルトであります3000〜4000の場合、制御番号は40未満にする必要があります。

これを行う方法はちょっとわかりません。それは「もしかしたら」のような声明ですか?私は前にこのようなことをしておらず、探し始める方法や場所を知らない。

あなたが check constraintに見ることができます
+1

「管理番号」とは何ですか、その使用方法は何ですか? – AKS

+0

@Amit Myが謝罪しました。元のリストに追加するのを忘れました。私はそれを追加すべきかどうかについてちょっと混乱しました。私はそれが '制御数値(4) 'であると考えられていますが、これは本当に私が持っているすべての情報です。 – bonzo

+0

このステートメントは正しいですか?「「管理番号」に40から60の任意の数字を設定し、20にデフォルト設定する必要がありますか?それが40と60の間でなければならない場合、どのように20にデフォルトすることができますか? – AKS

答えて

0

チェック制約がデータベース テーブル内の各行によって満たされなければならない要件を指定 SQLでの整合性制約のタイプです。制約は述部でなければなりません。テーブルの複数の列を1つまたは複数参照することができます。述部の結果は、NULLの存在に応じて、TRUE、FALSE、またはUNKNOWNのいずれかである になります。 述部がUNKNOWNと評価された場合、制約は に違反せず、行を表に挿入または更新することができます。これは、 ステートメントのWHERE句のSELECT文またはUPDATE文とは逆の です。

例えば、製品を含むテーブルでは、一つの製品 の製品と数量の価格が非負の値になるようにチェック 制約を追加することができる:

PRICE >= 0

QUANTITY >= 0

これらの制約がないと、負の価格( - $ 30)または数量(-3アイテム)を持つことができます。

チェック制約は、 データベース内のデータの妥当性を保証し、データの整合性を提供するために使用されます。 データベースレベルで使用されている場合、アプリケーション自体が無効なデータを受け入れる場合でも、データベースを使用するアプリケーションは 無効なデータを追加したり、有効なデータを変更して無効なデータ( )にすることはできません。

異なるrdbms製品では、検査制約が異なっています(一部ではないものもあります)。検査制約については、rdbmsのマニュアルを参照してください。

+0

それで、制約チェックが私のためにいくつかのメモリをジョギングしました。もし私がこの権利を理解していれば、最初に 'control_number numeric(5)default '20' 'とし、' constraint constraint Section_control_number check(control_number> 40 AND control_number <60) 'のような制約を持つでしょう。 – bonzo

+0

if 'C#は3000〜4000'の範囲内にありますか?私はあなたの拘束コード内にそれが表示されません。しかし、あなたのコード、データ、あなたは自分で制約をテストすることができます。 – Shadow

+0

それは私の次の橋です。そしてその上で、私は実際にコードを "テスト"することはできません。あなたが持っているすべての情報は、私がERD以外に与えたものです。私の頭文字はif-then関数のようなものでしたが、それは解決策ではないことが分かりました。 – bonzo

0

私は、check constraintではなく、triggerに基づくアプローチを推奨する傾向があります。 check constraintは値を40〜60に制限し、次にdefaultの値を20に制限することはできません。これらは互いに競合します。 triggerを使用すると、これらすべてのチェックを実装し、エラーメッセージを返すことができます。これにより、insertが失敗した理由がユーザーに伝えられます。

ただし、トリガーのパフォーマンスが許容レベルかどうかを確認するには、いくつかのテストを行う必要があります。

関連する問題