用户测试/组测试的体系结构

时间:2011-05-22 10:38:17

标签: php mysql model-view-controller architecture model

我有一个用户可以执行测试的用例。这是基于邀请。因此,管理员可以向用户发送邀请以执行选定的测试。也可以创建一个由多个用户组成的团队,并向团队的所有用户发送邀请,以便为该团队执行测试。

创建这些模型有几种选择,但我不确定最佳方式是什么(或者甚至可能有替代方案)。

选项1

  • 用户:id,name
  • 团队:id,name
  • UserTeam:user_id,team_id
  • UserInvite:id,user_id
  • TeamInvite:id,team_id
  • 测试:id,user_id,user_invite_id(可以为null),team_invite_id(可以为null),键入[user | team]

选项2

  • 用户:id,name
  • 团队:id,name
  • UserTeam:user_id,team_id
  • 邀请:id,user_id(可以为null),team_id(可以为null),键入[user | team]
  • 测试:id,user_id,invite_id

最好是单独邀请(对于团队和用户)并将测试链接到团队邀请或用户邀请(如选项1)。或者替代方案:拥有一个邀请并确定它是否链接到团队或用户(如选项2)?

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定义为特殊UserTeam.id同时为Primary KeyForeign KeyUser.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`))