一般来说,含有引用列(在你的例子,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