タグ付けされた質問 「unique-constraint」

DDL UNIQUE制約は、列または列のグループに含まれるデータがテーブル内のすべての行の間で一意であることを保証します。したがって、関連する列に含まれるデータは、関連するテーブルの行を一意に識別するのに役立ちます。

3
メールアドレスは一意ですか、それとも主キーですか?
私はデータベースの初心者です。文字列の比較が遅く、複雑な結合のパフォーマンスに影響するため、メールアドレスを主キーとして使用することはおそらく良いアイデアではないことがわかりました。メールを変更すると、すべての外部キーを変更する必要があり、多くのことを必要とします。努力の。 しかし、私のユーザーテーブルですべてのユーザーがメールアドレスを持っている必要があり、それらのメールアドレスはそれぞれ一意である必要がある場合、メール列に一意のインデックスを追加するだけで十分ですか?Afaikの一意のフィールドではnull値が許可されているため、私はすべてのユーザーがnull値を許可せずに電子メールアドレスを持っている必要があります。ここで見逃しているものはありますか?または、電子メール列を一意にし、サーバーでのデータ検証中に、ユーザーが電子メールアドレスを入力してすべてのユーザーが1つ持つことを確認するとしますか?

4
PRIMARY KEYまたはUNIQUE列としてのNVARCHAR列
SQL Server 2012データベースを開発していますが、主キーとしてのnvarchar列に疑問があります。 私はこのテーブルを持っています: CREATE TABLE [dbo].[CODES] ( [ID_CODE] [bigint] IDENTITY(1,1) NOT NULL, [CODE_LEVEL] [tinyint] NOT NULL, [CODE] [nvarchar](20) NOT NULL, [FLAG] [tinyint] NOT NULL, [IS_TRANSMITTED] [bit] NOT NULL DEFAULT 0, CONSTRAINT [PK_CODES] PRIMARY KEY CLUSTERED ( [CODE_LEVEL] ASC, [CODE] ASC ) ) しかし、今私は[CODE]列を主キーとして使用し、列を削除したいと思い[ID_CODE]ます。 NVARCHARとして列がある場合、問題やペナルティはありますPRIMARY KEYか? [CODE]列の値は一意でなければならないので、UNIQUEその列に制約を設定できると思っていました。 [CODE]主キーとして使用する必要がありますか、それとも列にUNIQUE制約を設定した方が良い[CODE]ですか?


4
広範なPKを使用する場合と、個別の合成キーおよびUQを使用する場合のパフォーマンスに関する考慮事項は何ですか?
レコードがいくつかの広範なビジネス分野で一意に識別できるいくつかのテーブルがあります。過去に、これらのフィールドをPKとして使用しましたが、これらの利点を考慮しています。 シンプルさ。無関係なフィールドはなく、インデックスは1つだけです クラスタリングにより、高速マージ結合と範囲ベースのフィルターが可能になります ただし、合成IDENTITY INTPK を作成し、代わりに別のUNIQUE制約を使用してビジネスキーを強制するケースについて聞いたことがあります。利点は、PKが狭いため、セカンダリインデックスがはるかに小さくなることです。 テーブルにPK以外のインデックスがない場合、2番目のアプローチを採用する理由はありませんが、大きなテーブルでは、インデックスが将来必要になる可能性があると想定して、狭い合成PKを採用することをお勧めします。 。考慮事項が不足していますか? ちなみに、私はデータウェアハウスで合成キーを使用することに反対しているのではなく、単一の広いPKを使用する場合と、狭いPKと広いUKを使用する場合にのみ関心があります。

3
フィールドを一意にすると、インデックスが作成されますか?
uniqueフィールドに制約を課す場合、スケーラブルな挿入時間を得るために、そのフィールドにインデックスを作成する必要もありますか?または、これは私のために行われますか? 具体的には、私はプロトタイピングのためにApache Derbyを使用していますが、おそらく近い将来にMySQLに移行する予定です。また、SQL標準にこれについて何かを述べている何かがあるといいのですが。 このフィールドで検索する必要がないので、役に立たないインデックスを作成したくありません。しかし、私はO(n)挿入時間よりも役に立たないインデックスが欲しいです。

2
複合外部キーに別の一意制約が必要なのはなぜですか?
以下は、レコードが同じテーブル内の親レコードを参照できる単純なテーブルです。 CREATE TABLE foo ( id SERIAL PRIMARY KEY, parent_id INT NULL, num INT NOT NULL, txt TEXT NULL, FOREIGN KEY (parent_id) REFERENCES foo(id) ); 他のフィールド値(num)の1つが親レコードと子レコードの間で同一でなければならないという追加の要件により、複合外部キーでうまくいくと思いました。最後の行を FOREIGN KEY (parent_id, num) REFERENCES foo(id, num) となったエラー:参照された表「foo」というのキーを与えられた一意の制約マッチングはありません。 この制約は簡単に追加できますが、参照される列(id)の1つが既に一意であることが保証されているのに、なぜ必要なのかわかりません。私の見たところ、新しい制約は冗長になります。

3
1つを除くすべての列を主キーとしてマークすることは妥当ですか?
映画を表すテーブルがあります。フィールドは次のとおり id (PK), title, genre, runtime, released_in, tags, origin, downloadsです。 重複する行によってデータベースを汚染することはできないため、一意性を強制したいと思います。問題は、異なる映画が同じタイトルを持つ可能性があることです、または同じフィールドを除くtagsとdownloads。一意性を強制する方法は? 私は2つの方法を考えました: downloads主キーを除くすべてのフィールドを作成します。downloadsそれはJSONであり、おそらくパフォーマンスに影響を与えるため、私は締め出します。 id主キーとしてのみ保持しますが、他のすべての列(再度、を除くdownloads)で一意制約を追加します。 よく似たこの質問を読みましたが、どうすればいいのかよくわかりませんでした。現在、このテーブルは他のテーブルとは関係ありませんが、将来的には関係する可能性があります。 現時点では20,000件弱のレコードですが、その数は増えると思います。これが問題にある程度関連しているかどうかはわかりません。 編集:私はスキーマを変更しました、そしてここに私がテーブルを作成する方法があります: CREATE TABLE movies ( id serial PRIMARY KEY, title text NOT NULL, runtime smallint NOT NULL CHECK (runtime >= 0), released_in smallint NOT NULL CHECK (released_in > 0), genres text[] NOT NULL default …

2
DynamoDB-複数の範囲キー
範囲キーとして複数のフィールドを持つことは可能ですか? 各行が一意に識別されるテーブルがあるとしましょう <A,B,C> ------------------------------- A | B | C | D | E | ------------------------------- A主hashキーはどこですか そして私が欲しいBとCプライマリにrangeキー。 DynamoDBの主キーとして3つ以上のフィールドを持つにはどうすればよいですか?

2
テーブルフィールドの組み合わせを介して一意のキーを使用する方法
次のsqlfiddleを見てください:http ://sqlfiddle.com/#!2/dacb5/1 CREATE TABLE contacts ( id int auto_increment primary key, name varchar(20), network_id int, network_contact_id int ); INSERT INTO contacts (name, network_id, network_contact_id) VALUES ('John', 4, 10), ('Alex', 4, 11), ('Bob', 4, 12), ('Jeff', 4, 45), ('Bill', 7, 11), ('Walter', 7, 45), ('Jessie', 7, 360) ; 連絡先の基本的な表があります。フィールドは、他のテーブルにリンクID番号が含まれています。network_idnetwork_contact_id INSERT IGNOREこのテーブルに対してクエリを実行できるようにしたいのですが、network_idとの組み合わせを、network_contact_id照合する一意のキーとして使用したいと考えています。 …

1
JSONオブジェクトからのUNIQUE制約の作成
2つのフィールド(idとdata(json))しか持たないテーブルpeoplesの例をいくつか見てみましょう。 SELECT data FROM peoples ; {"name": "Adam","pos":"DBA","age":22 } {"name": "Alice","pos":"Security","age":33 } {"name": "Bob","pos":"Manager","age":42 } 一意である必要がある「pos」フィールドの制約を作成したい。JSON制約についてインターネットで検索しましたが、結果はありませんでした。 この問題をどのように処理できますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.