您还可以将Team 定义为特殊的User,其中Team.id 既是Primary Key,又是Foreign Key 到User.id。您的表格将如下所示:
Option 3
* User: id, name --- User data
* Team: id, name --- Team data (name field can be dropped)
* UserTeam: user_id, team_id --- User belongs to Team
* Test: id, description --- Test definition
* Invite: id, user_id, test_id --- Invitation for User to make Test
* TestDone: id, user_id, invite_id --- TestDone after User accepted Invitation
所以所有团队也将成为用户。
在重新阅读了您对此部分的描述后,我略微更改了测试邀请。
示例脚本:
CREATE TABLE user
( id int NOT NULL AUTO_INCREMENT
, name VARCHAR(20) NOT NULL
, PRIMARY KEY (id)
) ;
CREATE TABLE team
( id int NOT NULL
, teamname VARCHAR(20) NOT NULL
, CONSTRAINT PK_team_id
PRIMARY KEY (id)
, CONSTRAINT FK_team_id_TO_user_id
FOREIGN KEY (id)
REFERENCES user(id)
) ;
INSERT INTO user
VALUES
(1, 'John')
, (2, 'George')
, (3, 'Mary' )
, (4, 'Team-1') ;
SELECT * FROM user ;
| id | name |
| 1 | John |
| 2 | George |
| 3 | Mary |
| 4 | Team-1 |
INSERT INTO team
VALUES
(4, 'Team-One') ;
SELECT * FROM team ;
| id | teamname |
| 4 | Team-One |
INSERT INTO team
VALUES
(5, 'Team-Two') ;
> Cannot add or update a child row: a foreign key constraint fails
> (`test/team`, CONSTRAINT `FK_team_id_TO_user_id` FOREIGN KEY (`id`)
> REFERENCES `user` (`id`))