一般來說,含有引用列(在你的例子,Venues
)該表是「子」表;包含引用列的表(在您的示例中,Venue_Types
)是「父」表。通常,被引用的列是表的主鍵;它應該是表的唯一標識符或候選鍵。
Venues
表中的venue_type
列標記爲FK,因爲它是外鍵列;它包含的值必須存在於參考表格Venue_types
表中。如果被引用的表具有複合主鍵,則可以有複合外鍵。
請注意,你可以有多個候選鍵的表,但表只能有一個主鍵。考慮「元素表」;它可能被表示爲:
CREATE TABLE elements
(
atomic_number INTEGER NOT NULL PRIMARY KEY CONSTRAINT c1_elements
CHECK (atomic_number > 0 AND atomic_number < 120),
symbol CHAR(3) NOT NULL UNIQUE CONSTRAINT c2_elements,
name CHAR(20) NOT NULL UNIQUE CONSTRAINT c3_elements,
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'))
);
列Symbol
,Name
和Atomic_Number
的每一個都是一個非常好的候選鍵。我選擇使用Atomic_Number
作爲主鍵(對同位素和核物理最有用),但如果我更關心化學,那麼Symbol
將是更好的選擇。
非常感謝馬克和喬納森!感謝你們兩個我可以完成我的數據庫,並希望它工作:) – pufAmuf