2 つの異なるデータ セット間のマッピング テーブルとして機能する 2 つの整数列を持つテーブルを作成し、それに正しい制約を設定したいと考えています。
最初に 2 つの列を複合主キーとして設定しましたが、それが多対多を表し、多対多マッピングの重複が発生しないようにするだけであることに気付きました。
両方の列がすべての行で一意の整数になるように指定するにはどうすればよいですか? 私は MS SQL を使用していますが、これは一般的なデータベース設計の問題だと思います。
2 つの異なるデータ セット間のマッピング テーブルとして機能する 2 つの整数列を持つテーブルを作成し、それに正しい制約を設定したいと考えています。
最初に 2 つの列を複合主キーとして設定しましたが、それが多対多を表し、多対多マッピングの重複が発生しないようにするだけであることに気付きました。
両方の列がすべての行で一意の整数になるように指定するにはどうすればよいですか? 私は MS SQL を使用していますが、これは一般的なデータベース設計の問題だと思います。
別のテーブルの作成は、多対多の関係を作成するために行われるため、おそらくそれを作成するべきではありません (何かが欠けている場合を除きます)。
1 対 1 の必須は、2 つのテーブルを 1 つのテーブルとして持つことと同じです。唯一許容できる 1 対 1 はオプションであり、2 つのテーブルを単に関連付ける必要があり、3 つ目のテーブルは必要ありません。
一方の列に主キーを作成し、もう一方の列に別の一意の制約または一意のインデックスを作成します。
CREATE TABLE [dbo].[test](
[x] [int] NOT NULL,
[y] [int] NOT NULL,
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED
( [x] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY])
ON [PRIMARY]
CREATE UNIQUE NONCLUSTERED INDEX [IX_test] ON [dbo].[test]
([y] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF,
DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
各列で UNIQUE 列制約を使用します。