伙计们,我正在努力为我的公司制作一个简单的票证生成系统,以吸引人。目前,我的MSSQL数据库中有一个名为的表tblTicket,另一个名为的表tblEngineer。
tblTicket
tblEngineer
我的应用程序是C#Windows窗体,因此在新的票证生成窗体上,我有许多文本框和一个用于分配工程师的comboBox,由填充tblEngineer。生成票证后,以这种形式输入的所有信息都将tblTicket与EngineerIDfrom一起存储tblEngineer。
EngineerID
效果很好,但是后来我的客户要求我添加选项,以便可以在一张票上分配3名工程师。
将来,我将必须开发一个“工程师模块”,在该模块中,工程师将只能看到分配给他的票证。它将包括用于身份验证的登录系统。因此,如果生成新票证并将其分配给3个工程师,则只有3个工程师应该能够看到该票证,而其他工程师则不能。
我应该如何采取这种方法?如果只有一名工程师,那真的很容易。现在,我需要制作多对多表格,例如tblAssignedEng票证ID和多个工程师ID吗?被称为外键?我对SQL没有太多的经验,所以我在这里有点挣扎,任何帮助将不胜感激。
tblAssignedEng
作为示例,标准做法是…
您有一个“ tblEngineer”表…
tblEngineer ----------- (PK) EngineerId EngineerName
还有一个“ tblTicket”表…
tblTicket --------- (PK) TicketId TicketDetails
现在,您添加了一个称为“ tblEngineerTickets”(或类似名称)的链接表,该表同时引用了工程师及其票证的ID。
tblEngineerTickets ------------------ (PK) EngineerTicketId (FK) EngineerId (FK) TicketId
这样一来,您可以将所有故障单详细信息和工程师详细信息分开保存,并仅使用ID进行链接…链接表如下所示…
EngineerId | TicketId ------------+---------- 1 | 1 1 | 2 1 | 3 2 | 1 2 | 2 2 | 3
这样,您可以将多个工程师分配给一个票证,和/或将多个票证分配给一个工程师。
这是最佳做法,它为您提供了最大的扩展机会。如果您只是向现有的工程师表中添加字段,例如“ Ticket1”,“ Ticket2”,“ Ticket3”等,那么您实际上将对代码施加限制,并且可能必须继续进行下去在代码中添加列。