Вы также можете иметь 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`))