0

次の表を想像してください。私の場合、[unique+not null = primary key]であるname必要があるuniqueと完全に確信しています。not nullしたがってname、主キーです。何らかの理由で (おそらく習慣による)、idint 型の主キー列を自然に作成しました。

その他の仮定: 私は絶対にテーブルに保持する必要があり、 (タイプの) が 20 文字を超えないことnameを絶対に確信しています。namevarchar

ここで、私の最初の質問は [おそらくイエスまたはノーが予想される近い質問] です。このようなテーブルを作成した場合、BCNF ボイス-コッド正規形を尊重しますか?

id2 番目のオプションの質問 [おそらく未解決の質問]:この場合、列を作成するのは適切ですか?

  CREATE TABLE Y (
    id int,
    name varchar(20),
    PRIMARY KEY(id, name)
    );
4

2 に答える 2

1

各列が一意の場合、おそらくどちらかが必要です

CREATE TABLE Y (
  id int primary key,
  name varchar(20) not null unique,
);

また

CREATE TABLE Y (
  id int not null unique,
  name varchar(20) not null unique
);

ここでの FD は id->name と name->id です。

非公式には、FD 内のすべての矢印が候補キーからの矢印である場合、BCNF を満たします。したがって、これは BCNF を満たします。

習慣からサロゲート id 列を作成するのは良いことではありません。最初に考え、トレードオフと副作用を認識してください。

于 2017-01-04T11:58:10.867 に答える