多对多关系?

New*_*mer 1 sql many-to-many

伙计们,我正在尝试为我的公司制作一个简单的票证生成系统,作为一个帮助。现在,我的 MSSQL 数据库中有一个名为 的表tblTicket和另一个名为 的表。tblEngineer

我的应用程序采用 C# Windows 窗体,因此在新的票证生成窗体上,我有许多文本框和一个用于分配工程师的组合框,该工程师由tblEngineer. 生成票证后,在此表单中输入的所有信息都将存储在fromtblTicket中。EngineerIDtblEngineer

它运行得很好,但后来我的客户要求我添加选项,以便可以在一张票上分配 3 名工程师。

将来,我将不得不开发一个“工程师模块”,其中工程师将只能看到分配给他的票证。它将包括用于身份验证目的的登录系统。因此,如果生成了一个新票证并分配给 3 名工程师,则只有 3 名工程师应该能够看到该票证,而其他人则看不到。

我应该如何采用这种方法?如果只有一名工程师,这真的很容易。现在我需要制作一个多对多表,比如tblAssignedEng包含工单 ID 和多个工程师 ID 的表吗?作为外键引用?我对 SQL 没有太多经验,所以我在这里有点挣扎,任何帮助将不胜感激。

Joe*_*per 5

标准做法是这样的,例如......

你有一个“tblEngineer”表......

 tblEngineer
 -----------
 (PK) EngineerId
 EngineerName
Run Code Online (Sandbox Code Playgroud)

还有一个“tblTicket”表......

 tblTicket
 ---------
 (PK) TicketId
 TicketDetails
Run Code Online (Sandbox Code Playgroud)

现在,您添加一个名为“tblEngineerTickets”(或类似)的链接表,该表引用工程师及其票证的 ID...

 tblEngineerTickets
 ------------------
 (PK) EngineerTicketId
 (FK) EngineerId
 (FK) TicketId
Run Code Online (Sandbox Code Playgroud)

这样,您就可以单独保存所有工单详细信息和工程师详细信息,并仅使用 Id 链接它们...链接表看起来像这样...

  EngineerId | TicketId
 ------------+----------
      1      |    1
      1      |    2
      1      |    3
      2      |    1
      2      |    2
      2      |    3
Run Code Online (Sandbox Code Playgroud)

这样,您可以将多个工程师分配给一张工单,和/或将多个工单分配给一名工程师。

这是最佳实践,它为您提供了最多的扩展机会。如果您只是将字段添加到现有的工程师表中,其中包含“Ticket1”、“Ticket2”、“Ticket3”等...您将有效地对代码进行限制,并且可能您必须继续输入到添加列的代码。