伙计们,我正试着为我的公司做一个简单的票务生成系统。现在,我在MSSQL数据库中有一个名为tblTicket的表和另一个名为tblEngineer的表。
我的应用程序在C# windows窗体中,所以在新的票证生成表单中,我有许多文本框和一个comboBox,用于分配由tblEngineer填充的工程师。在票证生成时,在此表单中输入的所有信息与来自tblTicket的EngineerID一起存储在tblEngineer中。
这是很好的工作,但后来我的客户要求我增加选项,以便3名工程师可以指派一张单程票。
在未来,我将不得不开发一个“工程师模块”,在其中,工程师将能够看到只分配给他的票。它将包括一个用于身份验证的登录系统。因此,如果生成了一张新的票,并分配给3名工程师,那么只有3名工程师能够看到票,而不是其他的。
我该怎么做呢?如果只有一个工程师,那就很容易了。现在,我是否需要使用票证id和多个工程师id创建一个多到多的表,比如tblAssignedEng?作为外键引用?我没有太多的SQL经验,所以我在这里有点挣扎,任何帮助都会很感激。
发布于 2014-03-19 13:06:20
标准做法是这样的,举个例子.
你有一张"tblEngineer“桌子..。
tblEngineer
-----------
(PK) EngineerId
EngineerName还有一张"tblTicket“桌子..。
tblTicket
---------
(PK) TicketId
TicketDetails现在添加一个名为"tblEngineerTickets“(或类似的)的链接表,它引用了工程师的Ids和它们的票证.
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“等.实际上,您将对代码设置一个限制,并且可能需要继续使用代码来添加列。
发布于 2014-03-19 12:39:47
我建议建立一对多的关系,而不是建立多到多的关系。您可以通过拥有一个在tblTicket和tblEngineer之间映射的表来实现这一点。例如:
tblEngineer
-----------
(PK) iEngineerID
tblTicket
---------
(PK) iTicketID
tblTicketEngineerMap
--------------------
(PK) iMapID
(FK) iEngineerID
(FK) iTicketID通过这样做,工程师和Ticker可以在许多地图中,建立两个一对多的关系,并允许您所寻求的功能。
关于为什么要尽量避免多到多表设计的Check out this thread。
发布于 2014-03-19 12:38:00
使用列存储不同的逻辑值:检查此链接http://sqlpro.developpez.com/cours/stockageopt/


这意味着数据操作需要3个表,包括关系查询引擎的大量开销。
是否有方法通过在成员表中集成所有这些数据来简化这一点?
为每个州分配一个代码:
Methode 1:(使用2个表)
tblTicket ( id_Ticket,工程师)
工程师( id_eng,其他栏目)
在tblTicket工程师中,可以设置多个值,如id_1 - id_2 - id_3 ( 1-2-3) 3工程师
Methode 2:(使用3个表)
tblticket ( id_ticket,其他列)(主键: id_Ticket )
工程师( id_Eng,其他列)(主键: id_Eng )
TicketEng (id_Ticket,id_Eng) (主键:( id_Ticket,id_Eng ))
https://stackoverflow.com/questions/22505938
复制相似问题