我正在尝试创建我的第一个数据库关系,我在这里很困惑(我也在阅读很多,但我仍然感到困惑) 我正在尝试创建两个表,场地和场地类型。
'venues'有一个ID和一个VENUE_TYPE列,而'venue_types'有ID和TYPE_NAME。 我希望'场地'中的VENUE_TYPE列引用'venue_types'中的ID列。假设VENUE_TYPE设置为3,'venue_types'中的第三行是Casino。
所以在某种程度上这是一对多的关系表,其中'venue_types'可以有很多场地,而'场地'只能有一个'venue_type'。
这就是我所拥有的,我不确定是否应该反过来,请告诉我:
非常感谢大家:)!
编辑:我也很困惑“venue_type”列旁边有一个外键标签,我不确定这是否意味着它包含外键或者它本身是外键?
答案 0 :(得分:2)
你说得对。在这种情况下,venue_types
将被视为此关系中的父表。外键指示符表示venues
中的字段是外键;意味着它包含引用表的主要(或候选)键值。
答案 1 :(得分:1)
通常,包含引用列的表(在您的示例中为Venues
)是“子”表;包含引用列的表(在您的示例中为Venue_Types
)是“父”表。通常,引用的列是表的主键;它应该是表的唯一标识符或候选键。
venue_type
表中的Venues
列标记为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
将是更好的选择。