gpt4 book ai didi

mysql - 使用生成的主键引用表

转载 作者:行者123 更新时间:2023-11-29 04:19:23 25 4
gpt4 key购买 nike

我正在尝试增加我的 MySQL 数据库模式的约束,向每个表添加外键约束。

表 1:用户

    +---------+----------+-------------
| id | username | Other fields
+---------+----------+-------------
| 1 | John |
| 2 | Mark |
+---------+----------+-------------

id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT

username` VARCHAR(50) NOT NULL

PRIMARY KEY (id)

表 2:DISKS(这与USERS 具有一对多关系)

    +---------+----------+-----------+-------------
| id | id_user | disk_name | Other fields
+---------+----------+-----------+-------------
| 1 | 1 | disk A |
| 2 | 2 | disk B |
+---------+----------+-----------+-------------

id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT

id_user INT(11) NOT NULL,

PRIMARY KEY (id,id_user) INDEX fk_disks_idx (id ASC)

CONSTRAINT fk_disks

FOREIGN KEY (id)

REFERENCES database.USERS (id)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

表 3:FILES(这与 DISKS 具有一对多关系)

    +---------+----------+----------+-----------+-------------
| id | id_disk | id_user | file_name | Other fields
+---------+----------+----------+-----------+-------------
| 1 | 1 | 1 | |
| 2 | 2 | 2 | |
+---------+----------+----------+-----------+-------------

id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT

id_user INT(11) NOT NULL

id_disk INT(11) NOT NULL

PRIMARY KEY (id,id_disk,id_user ) INDEX fk_files_idx (id ASC, id_user ASC)

CONSTRAINT fk_files

FOREIGN KEY (id_disk, id_user, id_user)

REFERENCES database.DISKS (id)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

表 2:FILES_ON_NAS(这与 FILES 具有一对一关系)

    +-------+----------+----------+----------+-----------+-------------
| id | id_files | id_user | id_disk | file_name | Other fields
+-------+----------+----------+----------+-----------+-------------
| 1 | 1 | 1 | 1 | |
| 2 | 1 | 2 | 2 | |
+-------+----------+----------+----------+-----------+-------------

id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT

id_files INT(11) NOT NULL,

id_user INT(11) NOT NULL,

id_disk INT(11) NOT NULL,

PRIMARY KEY (id,id_files,id_user,id_disk ) INDEX fk_files_on_nas_idx (id ASC)

CONSTRAINT fk_files_on_nas

FOREIGN KEY (id_files,id_user,id_disk)

REFERENCES database.FILES (id,id_user, id_disk)

ON DELETE NO ACTION

ON UPDATE NO ACTION)


问题:

如您所见,我在级联中引用的表越多,我得到的主键就越多。我如何设计数据库以避免主键的复制,从而避免数据重复?我应该删除每个表的自动递增键吗?这是一个好的做法吗?

谢谢

最佳答案

磁盘ID足以唯一标识一个磁盘。所以没有理由将用户 ID 包含到磁盘的主键中。这甚至是一个非常糟糕的主意,因为这意味着如果磁盘的用户发生变化,您将需要修改主键。

文件也一样。文件 ID 唯一标识一个文件。所以没有理由将磁盘 ID 添加到文件的主键中。

关于mysql - 使用生成的主键引用表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29949624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com