2011-09-02 65 views
2

我试图创建我的第一个数据库的关系,我很困惑在这里(我做的阅读过很多的,但我仍然感到困惑) 我试图创建两个表,场地和venue_types。表格关系 - 哪些是父母,哪些是孩子?

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

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

这是我有什么,我不知道这是否应该是周围的其他方法,请让我知道: enter image description here

非常感谢大家:)!

编辑:我也搞不清楚是“venue_type”栏旁边有一个外键标签这我不知道,如果这意味着它包含一个外键,或者它是一个外键本身?

+0

非常感谢马克和乔纳森!感谢你们两个我可以完成我的数据库,并希望它工作:) – pufAmuf

回答

1

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

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

2

你说得对。在这种情况下,venue_types将被视为此关系中的父表。外键指示符表示venues中的字段是外键;这意味着它保存被引用表的主键(或候选键)值。