問題タブ [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.
sql - 表列の一意制約
テーブル (データが含まれる既存のテーブル) があり、そのテーブルには列 UserName があります。この UserName は一意にする必要があります。したがって、次のような制約を追加します。
今、重複したユーザーがこのテーブルに存在するというエラーが発生し続けます。しかし、次のクエリを使用してデータベースをチェックしました。
これにより、NumberOfUsers として 1 を持つすべてのユーザーのリストが作成されます。したがって、重複はありません。しかし、ユーザー名を確認すると、彼は失敗し、次の結果が表示されます。
どうやら彼は「e」と「é」または「è」の比較に失敗しています...彼はこれらを無視しているようです.SQLが一意のキー制約を追加するときにこれらのアクセントを無視しない方法はありますか.
解決:
THX 皆さん、私は解決策を見つけました。これで問題が解決しました:
unit-testing - 単体テストの制約と NUnit 構文ヘルパーについて
私と同僚は新しいプロジェクトを開始し、TDD を最大限に活用しようとしています。私たちはまだ単体テストに関するすべての概念を把握しており、これまでのところ主に他の例に基づいています。
私の同僚は最近、NUnit 構文ヘルパーの要点に疑問を投げかけました。アサーションの例を次に示します。
私にはこれは完全に理にかなっていproduct.IsValid()
ますfalse
。一方、私の同僚は、単純に次のように書くことを好みます。
彼は彼に、これはより理にかなっており、より簡単に読むことができると言います.
これまでのところ、私たちが同意できる唯一のことは、前者からテストが失敗したときに、より役立つ出力が得られる可能性が高いということですが、より良い説明が必要だと思います. 構文ヘルパー ( http://nunit.com/blogs/?p=44 ) に関するいくつかの情報を調べましたが、それらは理にかなっていますが、正しく「感じる」以外の制約の概念を完全には理解していません。 .
制約の概念を使用する理由と、上記の単体テストの例を改善する理由を誰かが説明できるのだろうか?
ありがとう。
database-design - 開発者を「罰する」か、自動的に修正しますか? トリガーと制約
常に大文字にする必要があるデータベース列があるとします。
ここにいくつかのアイデアがあります:
1) 次の列制約を作成します。col = UPPER(col)
2) 以下を設定する before insert/update 行トリガーを作成します。col = UPPER(col)
通常、データベース データに対する制約が多ければ多いほど良いのですが、トリガーは不可解で悪いものになる可能性があります。コードを書いている開発者は同じ組織に属しているため、彼らが書いたコードは私たちが変更できると仮定します。
どのアプローチを使用しますか?その理由は?
問題のデータは実際には常に大文字であるため、大文字にする必要があります (最初はさまざまなサードパーティによってそのように印刷されています)。この特定のフィールドの大文字と小文字には意味がありません。
database - NHibernate で DB からの制約違反に対処する
私は、NHibernate のかなり一般的な使用例だと思うものを持っています。エンティティを作成し、ISession.Save() に続いて Transaction.Commit() を使用して保存しようとしました。この時点で、一意/主キー制約などの違反が例外として発生することを期待しています。ただし、私が見ているのは単なる GenericADOException です。これは、真の DB 障害と、一意性を維持するためにエンティティに別の名前を選択するようユーザーに求めるようなものとを区別するのに役立ちません。
現時点では、制約に違反しないようにするために、最初にクエリを実行するという醜い回避策を実装しました。これは発生を待っている単なる競合状態であり、ユーザーに「おっと、DB が何かおかしなことをしました。これをもう一度試してみてください」と表示されたくありません。メッセージの種類。
これを修正するエレガントな方法はありますか?
sql - SQL制約に関する質問
Sql Server 2005には、Id1とId2という2つの整数列を持つテーブルがあります。テーブル内で一意である必要があります(両方の列にまたがる一意のインデックスで十分簡単です)。また、値が2つの列の間で転置される場合は、テーブル内で一意である必要があります。
たとえば、SELECT *FROMMyTableは
最後の行は最初の行から転置された値であるため、最後の行がテーブルに入力されないようにする制約を作成するにはどうすればよいですか?
constraints - データベース内でテーブル間の制約を適用する最良の方法
テーブル間の制約をチェックするための最良の方法を探しています。たとえば、日付の子レコードの値が 2 つの親行列の日付範囲内にあるかどうかを確認するには、次のようにします。例えば:
私は2つのアプローチを見ています:
- この記事(または他の RDBMS で同等のもの) に示されているように、コミット時にマテリアライズド ビューを作成します。
- ストアド プロシージャとトリガーを使用します。
他のアプローチはありますか?最良の選択肢はどれですか?
UPDATE : この質問の動機は、「データベースまたはアプリケーションに制約を課す」ことではありません。これは疲れた質問だと思います。誰もが彼女の好きなようにしています。そして、中傷者には申し訳ありませんが、データベースに制約を付けて開発しています。ここからは、「データベースのテーブル間の制約を管理するための最良のオプションはどれですか?」という質問です。質問のタイトルに「データベース内」を追加しました。
更新 2 : 誰かが「 oracle」タグを追加しました。もちろん、具体化されたビューはオラクルツールですが、オラクルまたは他のRDBMSに関係なく、どのオプションにも興味があります。
oracle - 複数の列を制約して重複を防ぎ、null 値を無視するにはどうすればよいですか?
これは、Oracle データベース (10g) で実行した小さな実験です。(オラクルの)実装の利便性は別として、一部の挿入が受け入れられ、他の挿入が拒否される理由がわかりません。
いくつかの列の値が不明な行が時々あることが理にかなっていると仮定すると、重複の防止に関連する 2 つの使用例が考え
られます。 1. 重複を拒否したいが、制約された列の値が不明な場合は受け入れたい
2. 制約された列の値が不明な場合でも、重複を拒否したい。
ただし、明らかに Oracle は別のものを実装してい
ます。
ユースケース (2) に到達するために Oracle の実装を利用する方法を考えることができます。しかし、ユースケース(1)に到達する方法がわかりません。
つまり、どうすれば Oracle をこのように動作させることができるでしょうか?