正确创建关系数据库

时间:2017-07-26 09:04:07

标签: mysql relational-database

我有一个包含三个表的数据库。 表身份验证包含以下内容:

+----------+-----------------+------+-----+---------+----------------+
| Field    | Type            | Null | Key | Default | Extra          |
+----------+-----------------+------+-----+---------+----------------+
| id       | int(6) unsigned | NO   | PRI | NULL    | auto_increment |
| userid   | varchar(30)     | NO   |     | NULL    |                |
| password | varchar(30)     | NO   |     | NULL    |                |
| role     | varchar(20)     | NO   |     | NULL    |                |
| email    | varchar(50)     | YES  |     | NULL    |                |
+----------+-----------------+------+-----+---------+----------------+

登录包含以下内容:

+--------------+-----------------+------+-----+---------+----------------+
| Field        | Type            | Null | Key | Default | Extra          |
+--------------+-----------------+------+-----+---------+----------------+
| id           | int(6) unsigned | NO   | PRI | NULL    | auto_increment |
| TimeLoggedIn | text            | NO   |     | NULL    |                |
| sessionid    | varchar(255)    | NO   |     | NULL    |                |
+--------------+-----------------+------+-----+---------+----------------+

活动:

+----------+-----------------+------+-----+---------+-------+
| Field    | Type            | Null | Key | Default | Extra |
+----------+-----------------+------+-----+---------+-------+
| id       | int(6) unsigned | NO   | PRI | NULL    |       |
| Torrents | mediumtext      | NO   |     | NULL    |       |
+----------+-----------------+------+-----+---------+-------+

在其他表中,身份验证的id字段与id之间存在关联。

我需要在Activity中添加多行,每个id都有多个Torrent值。不幸的是,当我尝试添加一个带有重复id值的新行时:

INSERT INTO `Activity` (`id`, `Torrents`) VALUES ('1', 'dssfsdffdsffs');

它给了我错误:#1062 - Duplicate entry '1' for key 'PRIMARY'

我该如何解决?我是怎么创建错误的表的?

我已经阅读了以下明显重复的问题:

  1. #1062 - Duplicate entry for key 'PRIMARY'
  2. 但是虽然它说要删除它作为我的主键,但mysql不允许我创建一个关系,除非我把它作为主键。

1 个答案:

答案 0 :(得分:1)

通过将主键引用到主键,您无法启动一对多关系。这将是一对一的关系。

在Login和Activity表中,您需要使用外键来引用身份验证的ID。例如:

 CONSTRAINT `FK_Login` FOREIGN KEY (`AuthenticationID`) REFERENCES `Authentication` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE