表关系 - 哪个是父,哪个是孩子?

时间:2011-09-02 23:19:23

标签: mysql

我正在尝试创建我的第一个数据库关系,我在这里很困惑(我也在阅读很多,但我仍然感到困惑) 我正在尝试创建两个表,场地和场地类型。

'venues'有一个ID和一个VENUE_TYPE列,而'venue_types'有ID和TYPE_NAME。 我希望'场地'中的VENUE_TYPE列引用'venue_types'中的ID列。假设VENUE_TYPE设置为3,'venue_types'中的第三行是Casino。

所以在某种程度上这是一对多的关系表,其中'venue_types'可以有很多场地,而'场地'只能有一个'venue_type'。

这就是我所拥有的,我不确定是否应该反过来,请告诉我: enter image description here

非常感谢大家:)!

编辑:我也很困惑“venue_type”列旁边有一个外键标签,我不确定这是否意味着它包含外键或者它本身是外键?

2 个答案:

答案 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'))
);

每个列SymbolNameAtomic_Number都是非常好的候选键。我选择使用Atomic_Number作为主键(对同位素和核物理最有用),但如果我更关心化学,那么Symbol将是更好的选择。

相关问题