MySQL 外键设置

MySQL foreign key setup

dba 新手,我正在处理一个简单的库存数据库。这将列出设备项目、品牌、型号和状态 (active/inactive/lost)。

我正在为这个项目使用 MySQL Workbench、PhpMyAdmin、XAMPP、PHP、MySQL。

我不确定我是否以正确的方式处理这个问题,希望有人能给我一些建议。

到目前为止我有两个 tables - itemsstatus.

items

+--------+-------+------+-----------+--------+
| itemId | invNo | make | model     | status |
+--------+-------+------+-----------+--------+
| 1      | 123   | HP   | 566       | 1      |
+--------+-------+------+-----------+--------+
| 2      | 432   | Dell | Precision | 1      |
+--------+-------+------+-----------+--------+
| 3      | 456   | Dell | Precision | 2      |
+--------+-------+------+-----------+--------+

status

+----------+------------+
| statusId | statusType |
+----------+------------+
| 1        | Active     |
+----------+------------+
| 2        | Inactive   |
+----------+------------+
| 3        | Lost       |
+----------+------------+

(你可以看到上面我的itemstable有两个Active项,一个Inactive 项).

在前端应用程序中,table 将列出所有项目及其相应的状态(如下文所示)。

+--------+-------+------+-----------+--------+
| itemId | invNo | make | model     | status  |
+--------+-------+------+-----------+--------+
| 1      | 123   | HP   | 566       | Active  |
+--------+-------+------+-----------+--------+
| 2      | 432   | Dell | Precision | Active  |
+--------+-------+------+-----------+--------+
| 3      | 456   | Dell | Precision | Inactive|
+--------+-------+------+-----------+--------+

理想情况下,我希望能够更改我的 status table 中的状态类型,并相应地更新我的 items

我需要使用外键关系吗?

这里的任何帮助或指导都会很棒。我想在正确的轨道上开始!

您的设置是正确的。在状态 table 中,statusId 是主键,而在您的项目 table 中,状态是外键。这意味着它是一个引用另一个 table 中的主键的值。

要添加约束,您可以执行以下操作:

ALTER TABLE items ADD FOREIGN KEY (status) REFERENCES status(statusId);

您可以在 items.status 上添加一个外键:

ALTER TABLE items
ADD FOREIGN KEY (status)
REFERENCES status(statusid);

或者您可以添加:

[ON DELETE reference_option]
[ON UPDATE reference_option]

reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION

文档:https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html