問題タブ [constraints]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
8 に答える
3343 参照

database - コード内の DB 制約をチェックする必要がありますか、それとも DB によってスローされた例外をキャッチする必要がありますか

Jobs というテーブルにデータを保存するアプリケーションがあります。Jobs テーブルには、UNIQUE 制約を持つ Name という列があります。Name 列は PRIMARY KEY ではありません。新しいエントリを保存/更新する前に自分でエントリの重複をチェックする必要があるのか​​ 、それともデータアクセスレイヤーによってスローされる例外を待つ方がよいのか疑問に思います. 重要な場合は、このアプリにNHibernateを使用しています


すばらしいインプットをしてくれたみんなに感謝します。

例外がスローされる (そしてコードによってキャッチされる) のを待つのではなく、コードで検証する必要があるもう 1 つの理由を見つけました。この場合、NHibernate は NHibernate.Exceptions.GenericADOException のみをスローするようです。これは、この場合の例外の原因に関してあまり有益ではありません。それとも、ここでNHibernateの側面が欠けていますか?

0 投票する
2 に答える
20592 参照

database - db2 v7 で制約を有効/無効にする方法はありますか?

Oracle データベースから db2 v7 にテーブルをコピーする必要があります。これを行うには (何百万回もの削除と作成を回避するため)、削除せずに一時的に制約を有効/無効にする Oracle のような機能が db2 にあるかどうかを知りたいです。彼ら。

前もってありがとう、マウロ。

0 投票する
4 に答える
751 参照

sql - SQL テーブルで単一レベルの再帰を最適に適用するにはどうすればよいですか?

組織内に支店用のテーブルがあるとします。それらのいくつかは「メイン」ブランチであり、その他はメイン ブランチにロールアップされるサテライト オフィスです。システム内のいくつかの事柄にのみ影響するこの違いを除けば、ブランチはすべてピアであり、同じ属性 (アドレスなど) を持っています。これをモデル化する 1 つの方法は、次のような表です。

Where is_satellite_office= 1 このレコードが別のブランチsatellite_to_branch_idのサテライトであり、サテライトであるブランチがある場合はそのブランチを参照します。

これらの 2 つの列が特定のレコードで一致するように、テーブルに制約を設定するのは簡単です。

しかし、私が本当に欲しいのは、この再帰が1レベルの深さだけになることを保証する方法です...つまり、親としてブランチを指す場合、それは親自体を持ってはならず、その値is_satellite_officeは0. 別の言い方をすれば、私は完全に再帰的なツリー構造を望んでいません。単一の親子関係に制限したいだけです。それが私がコードを書く方法であり、完全にがらくたのように実行されないデータベースでそれを強制する方法があれば、私はそうしたいと思います。

何か案は?私は MSSQL 2005 に取り組んでいますが、一般的な (ベンダー固有ではない) ソリューションが優先されます。他に方法がない場合を除き、トリガーを適用する必要はありません。

編集: 明確にするためsatellite_to_branch_idに、同じブランチ テーブル内の別のレコードへの再帰的なポインターです。is_satellite_office BITを削除して、同じ情報を提供することに頼ることができることは知っていIsNull(satellite_to_branch_id)ますが、明示的にする方が少し明確であり、さらに、それは質問の要点ではありません。再帰の深さが 1 を超えるのを防ぐための純粋な SQL 制約の方法を本当に探しています。

0 投票する
4 に答える
2549 参照

sql - トリガーを使用して制約を適用する

制約ではできないと思う方法でテーブルの整合性を強制しようとしています...

私が適用したい制約は、日付が重複する同じ「fk_item_id」のエントリがあってはならないということです。

ノート:

invalid_from は、有効期間の直後の瞬間です。
これは、次の 2 つの期間が問題ないことを意味します...

  • '2008 Jan 01 00:00' -> '2008 Feb 01 00:00' (1 月全体)
  • '2008 Feb 01 00:00' -> '2008 Mar 01 00:00' (2月全体)

トリガーでそのルールを確認できます。ただし、トリガーが不正な挿入/更新を検出した場合、「不正な」挿入/更新が発生しないようにする最善の方法は何ですか?

(挿入されたレコードが 2 つの有効なレコードと 2 つの無効なレコードを含む場合、2 つの無効なレコードだけを停止できますか?)

乾杯、
民主党。

編集:

上記の場合、関数を使用した制約がうまく機能しました。しかし、トリガー バージョンで RAISERROR が機能しなかった理由がわかりませんでした。

トリガーがAFTERトリガーであり、BEFOREトリガーが必要なためだと思いましたが、それはオプションではないようです...

0 投票する
4 に答える
1356 参照

grails - コンボボックスで表されるGrailsのフィールドをオプションにするにはどうすればよいですか?

私は Grails で最初の実験を行っており、フィールドをコンボボックス (1 対 1 のドメイン関連付けや狭い範囲の制約を持つ数値など) で表す方法を探しています。コンボボックスへのエントリー。

これはどのように達成できますか?nullable:true制約を追加して静的プロパティにフィールドをリストすることを試みましたoptionalsが、どちらも望ましい結果をもたらしません。

これらは私のドメインクラスです:

0 投票する
3 に答える
586 参照

sql-server - SQL Server - 別の列に応じてある列に一意性を適用する

用語が間違っていたらすみません。MSSQL Server 2005 で制約を定義して、ある列の一意性を別の列に依存させるにはどうすればよいですか?

たとえば、最後の 2 つの列を考えてみます。

0 投票する
5 に答える
893 参照

database - DB 制約は既存のレコードを無視して、新しいデータのみに適用できますか?

さまざまなDBエンジンの答えを知りたいのですが、私たちの場合は; 列に対して一意ではないレコードがいくつかあるため、その列を一意にする必要があるため、重複する値を削除する必要があります。Oracle 10g を使用しています。これは合理的ですか?それとも、これは goto ステートメントのようなものですか :) ? 本当に削除する必要がありますか?何百万ものレコードがあるとしたら?

0 投票する
2 に答える
2552 参照

sql - 元の主キーを保持し、手動で更新せずにMS SQLServerで2行を交換する

次の問題があります: 次のような行があります

古い主キーと制約をすべて保持してそれらを交換したいと思います。もちろん、行を更新することで、これを手動で簡単に解決できます。更新コマンドを手動で実行するだけでなく、この種の問題に対する優れた解決策があるかどうか疑問に思っています。提案や推奨事項を本当に感謝しています。

0 投票する
2 に答える
38532 参照

sql - T-SQL:大文字と小文字を区別する一意のキーを作成するにはどうすればよいですか?

varchar大文字と小文字を区別するフィールドに一意の制約を作成するにはどうすればよいですか(SQL Server 2005)。

現在、私の制約は次のようになっています。

次の2つの値を挿入しようとすると、「Violation ofUNIQUEKEYconstraint...」エラーが発生します。

大文字と小文字が異なる2つの値をunqiueとして処理したいと思います。add constraint次のコードが含まれると思いますが、構文がどのように変わるかわかりません。

0 投票する
2 に答える
433 参照

mysql - 一部の列が設定されていない場合、mysqlが行の挿入に失敗するようにするにはどうすればよいですか?

INT NOT NULL列を具体的に設定せずにテーブルに行を挿入できるという問題が発生しています(デフォルトは0で、私の目的には無効です)。

この方法でテーブルを作成します。

私はこの挿入が失敗することを期待します:

残念ながら、これはうまくいきます。(ノードWHERE ID = 0はありません)

挿入のトリガーを作成せずに、この挿入を強制的に失敗させる方法はありますか?

前もって感謝します、

クリス

PS私はmysqlVer14.12 Distrib 5.0.45を使用しており、readline 5.0を使用するredhat-linux-gnu(x86_64)用です