問題タブ [unique-constraint]
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 - 一意の制約を使用してデータベースレコードを更新する
次の単純なテーブル構造(SQL Server 2008)を考えると、数列列の一意性を維持できるようにしたいのですが、特定のレコードのその値を更新できるようにしたいのです。
私のインターフェースでは、アイテムの順序を混乱させることができ、更新を実行する前に、どの非重複シーケンスにすべてを含めるべきかがわかりますが、一意の制約の違反に直面することなく更新を実行するにはどうすればよいですか?
たとえば、次のレコードがあるとします。
そして、それらのシーケンス番号を次のように更新したいと思います。
しかし、実際には、数十のアイテムを扱うことができました。シーケンス番号は重複してはなりません。トリガーを使用したり、制約を一時的に無効にしたりすることを考えましたが、それではさらに問題が発生するようです。私はC#とLINQ-to-SQLを使用していますが、厳密にデータベースソリューションを利用できます。
hibernate - Hibernateを使用して固有の制約に違反することを回避するにはどうすればよいですか?
列の1つに一意の制約が定義されているデータベーステーブルがあります。複数のスレッドを持つメッセージ処理システムもあります。メッセージが消費されているため、2つのメッセージに同じ値(一意の制約が定義されている列の値)を持つ同じエンティティが含まれている場合があります。したがって、コードでは、サービスレイヤーは最初にこの一意のフィールドを使用して(休止状態の名前付きクエリを介して)データベースにクエリを実行し、最初にレコードが存在するかどうかを確認します。そうでない場合は、新しいレコードを挿入します。この一意のフィールドを持つレコードがすでに存在する場合、レコードを挿入する代わりに、レコードを更新し、別のテーブルに子レコードも挿入します。
2番目のスレッドがレコードがまだ存在しないと判断して挿入しようとする問題が発生しています。しかし、この時点で、最初のスレッドはすでにレコードを正常に挿入しています。そのため、一意の制約の違反について例外がスローされます。hibernate / oracleソリューションを使用してこの種の状況を処理するための最良の方法は何ですか?ある種のロックオプションが必要ですか?ありがとう。
sql - 一意性制約の命名規則
命名規則は重要であり、主キーと外部キーは一般的に使用されている明白な規則(それぞれPK_Table
とFK_Table_ReferencedTable
)です。インデックスのIX_Table_Column
命名もかなり標準的です。
UNIQUE制約はどうですか?この制約に対して一般的に受け入れられている命名規則はありますか?私は、、そして誰かが推薦しているのを見てきましたUK_TableName_Column
-UQ_TableName_Column
それAX_TableName_Column
がどこから来ているのかわかりません。
私は通常使用しましUQ
たが、特に好きではありません。また、支持者に対してそれを使用するという私の選択を擁護しなければならないことを楽しんでいませんUK
。
最も一般的な命名についてコンセンサスがあるかどうか、または1つが他よりも理にかなっている理由についての適切な理由があるかどうかを簡単に確認したいと思います。
mysql - UNIQUE 制約、フィールドに特定の値が含まれている場合のみ
2 つの列に対して UNIQUE INDEX 制約を作成しようとしていますが、別の列に値 1 が含まれている場合のみです。たとえばcolumn_1
、column_2
はactive = 1
. を含むすべての行は、他の行の値が何であるかに関係なく、別の行とactive = 0
値を共有できます。ただし、の値を共有できない行、またはを持つ別の行と値を共有できない行。column_1
column_2
active
active = 1
column_1
column_2
active = 1
「共有」とは、同じ列に同じ値を持つ 2 つの行のことです。例: 行 1.a = 行 2.a AND 行 1.b = 行 2.b。行 1 の両方の列が行 2 の他の 2 つの列と一致する場合にのみ、値が共有されます。
私は自分自身を明確にしたことを願っています。:\
ruby - Rails におけるポリモーフィック関連のサブカテゴリへのアプローチ
皆さん、こんにちは。現在、いくつかの異なるモデルで使用されているポリモーフィック アソシエーションがあります。各モデルには独自のビデオ ファイルが関連付けられているため、「ビデオ可能」なポリモーフィック アソシエーションが使用されます。しかし最近、2 種類のビデオを持つ新しいモデルを作成する必要があることがわかりました。コードに話させます。
理想的には、割り当てモデルは、ポリモーフィック アソシエーションを使用しながら、2 つの特別なタイプのビデオ オブジェクトを持ちます。単一テーブルの継承を検討しましたが、これが最善のアプローチかどうかはわかりません。私のオプションは何ですか?私は video_draft モデルと video_final モデルを作成したくありません。結局のところ、これらは他のすべてのビデオの添付ファイルに過ぎないからです。唯一の違いは、独自の参照が必要な特殊なビデオ添付ファイルであることです。
ruby-on-rails - HABTM - 一意性制約
ユーザーとロールという HABTM 関係を持つ 2 つのモデルがあります。
- ユーザー - has_and_belongs_to_many :roles
- 役割 - 所属先:ユーザー
結合 (users_roles テーブル) に、user_id と role_id が一意でなければならないという一意性制約を追加したいと考えています。Rails では、次のようになります。
もちろん、Rails では通常、HABTM アソシエーションで結合関係を表すモデルはありません。
だから私の質問は、制約を追加するのに最適な場所はどこですか?
c# - SQL Server、MySQL データベースで一意の制約を作成する
SQL Server または MySQL で一意の制約を作成する方法を教えてください。たとえば、主キーとして「CustomerID」を持つ「Customer」テーブルがあります。「CustomerCode」を一意にする (つまり、重複しないようにする) 場合、SQL Server Studio 2008 でこれを構成するにはどうすればよいですか?
java - Hibernate で一意のキーに基づいて検索または挿入する
一意だが主キーではないキーに基づいて Hibernate オブジェクトを返すメソッドを作成しようとしています。エンティティがデータベースに既に存在する場合はそれを返したいのですが、そうでない場合は、新しいインスタンスを作成して保存してから返したいと思います。
更新:これを書いているアプリケーションは、基本的に入力ファイルのバッチプロセッサであることを明確にしましょう。システムは、ファイルを 1 行ずつ読み取り、データベースにレコードを挿入する必要があります。ファイル形式は基本的に、スキーマ内の複数のテーブルの非正規化ビューであるため、親レコードを解析してデータベースに挿入し、新しい合成キーを取得するか、既に存在する場合はそれを選択する必要があります。次に、そのレコードに戻る外部キーを持つ他のテーブルに関連するレコードを追加できます。
これが難しい理由は、各ファイルを完全にインポートするか、まったくインポートしない必要があるためです。つまり、特定のファイルに対して行われるすべての挿入と更新は、1 つのトランザクションの一部である必要があります。すべてのインポートを実行するプロセスが 1 つしかない場合、これは簡単ですが、可能であれば、これを複数のサーバーに分割したいと考えています。これらの制約のため、1 つのトランザクション内にとどまることができる必要がありますが、レコードが既に存在する例外を処理する必要があります。
親レコードのマップされたクラスは次のようになります。
このメソッドを書く最初の試みは次のとおりです。
問題は、探している名前が存在する場合、uniqueResult() の呼び出しによって org.hibernate.AssertionFailure 例外がスローされることです。完全なスタック トレースは以下のとおりです。
この例外がスローされる原因を知っている人はいますか? 休止状態はこれを達成するためのより良い方法をサポートしていますか?
また、最初に挿入してから、それが失敗したかどうか、いつ失敗したかを選択する理由を先制的に説明しましょう。これは分散環境で機能する必要があるため、チェック全体で同期して、レコードが既に存在するかどうかと挿入を確認できません。これを行う最も簡単な方法は、すべての挿入で制約違反をチェックして、データベースにこの同期を処理させることです。
mysql - MySQL-既存のフィールドを一意にする
一意である必要があるがそうではないフィールドを持つ既存のテーブルがあります。これを知っているのは、別の既存のエントリと同じ値のエントリがテーブルに作成され、これが問題を引き起こしたためです。
このフィールドが一意の値のみを受け入れるようにするにはどうすればよいですか?
mysql - 条件付きのMySQL UNIQUE Constraint
次の条件で、2 つの列 (id_1 と id_2) に一意のインデックス制約を作成しようとしています。
出来ますか?
ありがとう。