伙计们我正在努力为我的公司制作一个简单的票务生成系统。现在,我的MSSQL数据库中有一个名为tblTicket
的表和另一个名为tblEngineer
的表。
我的应用程序是在C#窗体表格中,所以在新的票证生成表单中,我有许多文本框和一个用于分配工程师的组合框,由tblEngineer
填充。生成故障单后,此表单中输入的所有信息都会与tblTicket
中的EngineerID
一起存储在tblEngineer
中。
它工作得很好,但后来我的客户要求我添加选项,以便可以在一张票上分配3名工程师。
将来,我将不得不开发一个"工程师模块"在哪个工程师只能看到分配给他的门票。它将包括用于身份验证的登录系统。因此,如果生成一张新票并分配给3名工程师,那么只有3名工程师能够看到该票,而不能看到其他票。
我应该如何处理这种方法?如果只有一名工程师,那真的很容易。现在,我是否需要创建一个多对多的表,如tblAssignedEng
,其中包含票证ID和多个工程师ID?引用为外键?我对SQL有很多经验,所以我在这里有点挣扎,任何帮助都会受到赞赏。
答案 0 :(得分:3)
我建议建立一对多的关系,而不是建立多对多的关系。您可以通过在tblTicket
和tblEngineer
之间制作表格来完成此操作。例如:
tblEngineer
-----------
(PK) iEngineerID
tblTicket
---------
(PK) iTicketID
tblTicketEngineerMap
--------------------
(PK) iMapID
(FK) iEngineerID
(FK) iTicketID
通过这种方式,工程师和Ticker可以在许多地图中,形成两个1对多关系,并允许您寻求的功能。
Check out this thread至于为什么要尝试避免多对多的表设计。
答案 1 :(得分:3)
标准做法就是这样,作为一个例子......
你有一个“tblEngineer”表......
tblEngineer
-----------
(PK) EngineerId
EngineerName
和“tblTicket”表......
tblTicket
---------
(PK) TicketId
TicketDetails
您现在添加一个名为“tblEngineerTickets”(或类似)的链接表,该表引用了工程师及其票证的ID ...
tblEngineerTickets
------------------
(PK) EngineerTicketId
(FK) EngineerId
(FK) TicketId
这样,您可以单独保留所有故障单详细信息和工程师详细信息,并仅使用Ids链接它们...链接表看起来像这样......
EngineerId | TicketId
------------+----------
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
2 | 3
这样,您可以将多个工程师分配给一个工单,和/或将多个工单分配给工程师。
这是最佳做法,它为您提供了最大的扩展机会。如果您只是在现有的工程师表中添加字段“Ticket1”,“Ticket2”,“Ticket3”等等......您实际上会对代码设置限制,并且您可能必须继续使用添加列的代码。
答案 2 :(得分:0)
使用列存储不同的逻辑值: 点击此链接http://sqlpro.developpez.com/cours/stockageopt/
这意味着数据操作需要3个表,包括关系查询引擎的显着成本。
有没有办法通过在Member表中集成所有这些数据来简化这一过程?
为每个州分配代码:
tblTicket(id_Ticket,工程师)
工程师(id_eng,其他专栏)
在tblTicket工程师中,您可以设置多个值,如id_1 - id_2 - id_3(1-2-3)3位工程师
tblticket(id_ticket,其他列)(主键:id_Ticket)
工程师(id_Eng,其他列)(主键:id_Eng)
TicketEng(id_Ticket,id_Eng)(主键:(id_Ticket,id_Eng))