我目前正在为我公司的问题跟踪器工作,以帮助他们跟踪网络出现的问题。我正在使用C#和SQL。
每个问题都有大约需要跟踪的二十件事情(状态,工作损失,创建者,谁在做什么等)。我需要将受问题影响的团队列表附加到主要问题表中的每个条目。理想情况下受影响的团队列表包含指向唯一表格实例的某种链接,仅针对该问题,显示受影响的团队列表以及每个团队实验室受影响的百分比。
所以我的问题是,在问题表的条目和该问题的唯一表之间实现这种“链接”的最佳方式是什么?或者我在想这个问题是错的。
答案 0 :(得分:14)
你所描述的被称为“多对多”关系。一个团队可能受到许多问题的影响,同样一个问题也会影响到许多团队。
在SQL数据库设计中,这种关系需要第三个表,其中包含对其他两个表中每个表的引用。例如:
CREATE TABLE teams (
team_id INTEGER PRIMARY KEY
-- other attributes
);
CREATE TABLE issues (
issue_id INTEGER PRIMARY KEY
-- other attributes
);
CREATE TABLE team_issue (
issue_id INTEGER NOT NULL,
team_id INTEGER NOT NULL,
FOREIGN KEY (issue_id) REFERENCES issues(issue_id),
FOREIGN KEY (team_id) REFERENCES teams(team_id),
PRIMARY KEY (issue_id, team_id)
);
答案 1 :(得分:3)
这听起来像是经典的多对多关系...... 你可能想要三个表,
一个问题,每个独立问题创建一个记录(行)......
一个团队,每个团队有一个记录......
还有一个名为“IssueTeams”或“TeamIssueAssociations”或“IssueAffectedTeams”的表来保持两者之间的联系......
最后一个表将为每个团队提供一个记录(行),问题会影响...此表将有一个2列复合主键,列在IssueId,AND TeamId ...每行必须有这两个值的唯一组合......每个值分别是问题表的外键(FK)和团队表。
对于每个团队,此表中可能有零到多条记录,对于团队受影响的每个问题,
并且对于每个问题,可能存在零到多个记录,每个记录代表问题影响的团队。
答案 2 :(得分:2)
如果我理解正确的话,我会创造......
TEAM_ISSUES表需要包含ISSUE和TEAM表的foriegn密钥(即它应该包含一个ISSUE_ID和一个TEAM_ID ......因此它充当两个“主”表之间的交集。听起来这是也是放百分比的地方。
这有意义吗?
答案 3 :(得分:2)
有很多优秀的免费开源问题跟踪器,你应该有很好的理由来实现自己的。您可以更好地利用自己的时间来定制现有的跟踪器。
我们在我工作的团队中使用Bugtracker.NET。它已经定制了很多,但从一开始就没有必要开发系统。我们选择该产品的原因是它在.NET上运行并且与SQL Server配合使用,但还有许多其他选择。
答案 4 :(得分:1)
我们可以在您的域中看到实体:
因此,在识别出这两个项目之后,您可以用两个表来表示它们,并且它们之间的关系是另一个表,它也可以跟踪百分比影响。
希望这有帮助。
答案 5 :(得分:1)
我不会为每个问题创建一个唯一的表。我会做这样的事情
Table: Issue IssueId primary key status workLoss createdby etc Table: Team TeamID primary key TeamName etc Table: IssueTeam IssueID (foreign key to issue table) TeamID (foreign key to team table) PercentLabsAffected
答案 6 :(得分:1)
除非我理解你正在尝试做的事情,否则你不应该为每个问题实例提供一个唯一的表格。
您的数据库应该有三个表:问题表,Teams表和IssueTeams连接表。 IssueTeams表将包括引用团队中相应团队和问题中的问题的外键(即TeamID和IssueID)。因此,问题团队可能会有(Issue1,Team1),(Issue1,Team3)等记录。您可以将每个团队实验室的受影响百分比保留在加入表中。
答案 7 :(得分:1)
嗯,只是为了成为现代和敏捷的人,“第一次正确行事”不像“可重构”那样时髦。但要完成你的模型:
你有问题(嘿嘿)。你有团队。
问题影响了许多团队。团队受到许多问题的影响。所以只是对于基本问题,你似乎有一个经典的很多:很多关系。包含两列的连接表,一列用于发布PK,另一列用于Team PK。
然后你有问题是团队的百分比。当然,这是一个动态的方面,所以要做到正确,你需要指定一个触发器。但显而易见的地方是问题中的一列(“Affected_Team_Percentage”)。
答案 8 :(得分:0)
如果我理解正确,您希望为每个问题创建一个受影响的新团队表。在正常操作中创建表会使我的关系数据库设计响铃。不要这样做!
而是使用一个带有foreign key的affected_teams表到issues表,以及一个外键到teams表。这样就可以了。