我有一个用户可以执行测试的用例。这是基于邀请。因此,管理员可以向用户发送邀请以执行选定的测试。也可以创建一个由多个用户组成的团队,并向团队的所有用户发送邀请,以便为该团队执行测试。
创建这些模型有几种选择,但我不确定最佳方式是什么(或者甚至可能有替代方案)。
选项1
选项2
最好是单独邀请(对于团队和用户)并将测试链接到团队邀请或用户邀请(如选项1)。或者替代方案:拥有一个邀请并确定它是否链接到团队或用户(如选项2)?
答案 0 :(得分:1)
就个人而言,我会选择你的第二个选择。
但是,您可能还想调查第三个选项。它可以存储发送给多个团队和用户的邀请:
user: id, name
team: id, name
invite: id
test: id, invite_id
user_invite: invite_id, user_id
team_invite: invite_id, team_id
答案 1 :(得分:1)
您还可以将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`))