参考表&参考表

时间:2011-11-11 14:46:16

标签: mysql sql database-design foreign-keys

我正在努力理解人际关系,自然会出现问题。

MySQL Workbench screenshot

引用表的含义是什么,引用的表是什么意思?在上面的例子中哪一个应该被引用,哪一个引用? 让我们说,为了论证,settlements表是一个子表(没有国家,结算不可能存在)。该子表是应该引用还是引用?

我不想为这样一个小问题打开一个新问题: 那个Mandatory复选框是什么意思?这是否意味着需要结算表或需要country_id?或者别的什么?

5 个答案:

答案 0 :(得分:10)

在PostgreSQL文档中找到了一个非常好的解释。

假设您已经多次使用过产品表:

CREATE TABLE products (
    product_no integer PRIMARY KEY,
    name text,
    price numeric
);

我们还假设您有一个存储这些产品订单的表格。我们希望确保订单表仅包含实际存在的产品订单。因此,我们在订单表中定义了一个引用products表的外键约束:

CREATE TABLE orders (
    order_id integer PRIMARY KEY,
    product_no integer REFERENCES products (product_no),
    quantity integer
);

现在无法使用product_no条目创建未出现在products表中的订单。

我们说在这种情况下,订单表是引用表,而products表是引用的表。同样,还有引用和引用的列。

答案 1 :(得分:4)

引用的表是“父”表。

引用表是'子'表。

线索在SQL DDL中,例如

ALTER TABLE Settlements ADD
   FOREIGN KEY (country_id)
   REFERENCES Countries (id);

结算参考国家,暗示引用国家。

答案 2 :(得分:2)

settlements表格(包含country_id字段)正在引用 countries表格(ID字段)

我认为强制性复选框与关系无关。它只是字段上的非空约束。但是你应该参考MySQL Workbench的用户手册。

答案 3 :(得分:1)

强制复选框,如果它似乎对生成的SQL没有影响,则对图形有一些影响。如果不加以检查,你可以在相关的关系线末端看到小圆(对于关系符号乌鸦的脚)。

这意味着外键可以为null,也就是说。不是强制性的。

答案 4 :(得分:0)

一个国家/地区可以有多个和解,因此国家/地区表是引用的表,结算表是引用表。我不知道强制性领域。