多对一关系?

Many to One relationship?

以下MySQL代码...

CREATE TABLE Employee (
    id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    departmentId TINYINT UNSIGNED NOT NULL
        COMMENT "CONSTRAINT FOREIGN KEY (departmentId) REFERENCES Department(id)",
    firstName VARCHAR(20) NOT NULL,
    lastName VARCHAR(40) NOT NULL,
    email VARCHAR(60) NOT NULL,
    ext SMALLINT UNSIGNED NULL,
    hireDate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    leaveDate DATETIME NULL,
    INDEX name (lastName, firstName),
    INDEX (departmentId)
)

CREATE TABLE Department (
    id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(40),
    UNIQUE (name)
)

... 定义员工和部门之间的多对一关系。也就是说,一个员工只能在一个部门,但一个部门可以有多个员工。但是有人可以更详细地解释一下吗?上面的代码是怎么告诉我的?

此处的这一行:departmentId TINYINT UNSIGNED NOT NULL COMMENT "CONSTRAINT FOREIGN KEY (departmentId) REFERENCES Department(id)" 指部门 table 的 id 字段。在 Department 中,每个部门只能有一个实例,但在 Employee 中,许多员工可能在同一个部门,所以这是 Department -> Employee

中的一对多

这有意义吗?此外,如果您要更改部门本身的名称,则无需更新 Employee table 中的任何内容,因为它引用回 Deparment table自动。

有时通过查看引用 table.

的外键很容易辨别两个(或更多)table 之间的关系

一个简单的规则是,如果外键本身在其自身 table 中是主键,则关系可能是 1 对 1,而如果外键在其自身中不是主键 table,关系可能是一对多,其中 table 在“多”端有外键。

在您的示例中,对于 Employee 中的 departmentID,它不是主键。因此,在这种情况下,一个Department可以同时被很多Employees引用,从而可以建立“1对多”的关系。

但是,在您引用的示例 from mkyong.com 中,table(股票和 stock_detail)都使用 stock_id 作为主键。在这种情况下,可以建立“一对一”关系。

考虑一下:stock 和 stock_detail tables 都将只包含一条具有特定值 stock_id 的记录。 I made a sample here.