前文
純粋なリレーショナル データベース理論では、複合主キー (PK) を持つことを止めるものは何もなく、それらを参照する外部キー (FK) を持つことができ、それらの FK も必然的に複合です。一部のソフトウェアでは複合キーが扱いにくいため、自動生成された番号を含む ID 列を追加し、テーブルの PK として指定することがよくあります。他のテーブルは、(単純な) ID 列を参照する (単純な) FK を持つことができます。珍しくない間違いの 1 つは、元の複合 PK が依然として候補キー (CK) であることを忘れることです。代替キー (AK) になります。
転用
CK、AK、および PK のシステムは次のように機能します。
- すべての CK は、テーブル内のデータの残りの各行のデータの一意の識別子である (1 つ以上の) 列のセットです。
- 1つのCKをPKとして指定することができる。
- 他の CK は AK になります。
次の表を検討してください。
CREATE TABLE elements
(
atomic_number INTEGER NOT NULL PRIMARY KEY
CHECK (atomic_number > 0 AND atomic_number < 120),
symbol CHAR(3) NOT NULL UNIQUE,
name CHAR(20) NOT NULL UNIQUE,
atomic_weight DECIMAL(8,4) NOT NULL,
period SMALLINT NOT NULL
CHECK (period BETWEEN 1 AND 7),
group CHAR(2) NOT NULL
-- 'L' for Lanthanoids, 'A' for Actinoids
CHECK (group IN ('1', '2', 'L', 'A', '3', '4', '5', '6',
'7', '8', '9', '10', '11', '12', '13',
'14', '15', '16', '17', '18')),
stable CHAR(1) DEFAULT 'Y' NOT NULL
CHECK (stable IN ('Y', 'N'))
);
atomic_number
、 、symbol
のそれぞれがname
候補キーです。化学では、symbol
が主キーとして最も便利です。物理学では、atomic_number
が最も便利です。同位体などに関する表はatomic_number
列を参照していますが、化合物に関する表はsymbol
列を参照しています。ここにある 3 つの CK はすべて単純です。一方、同位体表には、元素の原子番号(陽子の数)と中性子の数からなる化合物 PK があります。
答え
質問に戻りますが、データは 3NF である可能性が高く、BCNF である可能性が高くなります (正式には 3NF よりも強力です)。
設計を評価する前に、テーブル スキーマを見せて、列に適用される制約 (機能の依存関係など) を指定する必要があります。しかし、先験的に、それが十分に正規化されるのを妨げるものは何もありません。