¿Relación de muchos a muchos?

Chicos, estoy tratando de hacer un simple sistema de generación de boletos para mi empresa como un favor. Por ahora, tengo una tabla llamada tblTicket y otra tabla llamada tblEngineer en mi database MSSQL.

Mi aplicación está en formularios de Windows C, así que en el nuevo formulario de generación de tickets, tengo muchos cuadros de text y un comboBox para asignar el ingeniero que está siendo tblEngineer por tblEngineer . Tras la generación de tickets, toda la información ingresada en este formulario se almacena en tblTicket junto con EngineerID de tblEngineer .

Funcionaba de maravilla, pero luego mi cliente me pidió que agregara la opción para que se pudieran asignar 3 ingenieros en un solo boleto.

En el futuro, tendré que desarrollar un "module de ingeniero" en el cual el ingeniero podrá ver los boletos asignados a él únicamente. Incluirá un sistema de inicio de session para fines de authentication. Entonces, si se genera un nuevo ticket y se asigna a 3 ingenieros, solo 3 ingenieros deberían poder ver el ticket y no los demás.

¿Cómo debo abordar este enfoque? Fue realmente fácil si hubiera un solo ingeniero. ¿Ahora necesito hacer una tabla de muchos a muchos como tblAssignedEng con ID de ticket y múltiples ID de ingeniero? referencedo como una key externa? No tengo mucha experiencia con SQL así que estoy luchando aquí y cualquier ayuda sería apreciada.

La práctica estándar sería esta, como un ejemplo …

Usted tiene una tabla "tblEngineer" …

  tblEngineer ----------- (PK) EngineerId EngineerName 

Y una tabla "tblTicket" …

  tblTicket --------- (PK) TicketId TicketDetails 

Ahora agrega una tabla de enlace llamada "tblEngineerTickets" (o similar) que hace reference a los ID del ingeniero y sus tickets …

  tblEngineerTickets ------------------ (PK) EngineerTicketId (FK) EngineerId (FK) TicketId 

De esta forma, saveá todos los detalles del ticket y los detalles del ingeniero por separado, y los vinculará usando SOLAMENTE los ID … la tabla de enlace se vería así …

  EngineerId | TicketId ------------+---------- 1 | 1 1 | 2 1 | 3 2 | 1 2 | 2 2 | 3 

De esta manera, puede tener varios ingenieros asignados a un boleto y / o múltiples boletos asignados a un ingeniero.

Esta es la mejor práctica y te da la mayor oportunidad de expansión. Si tuviera que agregar campos a sus tablas de Ingeniero existentes diciendo "Ticket1", "Ticket2", "Ticket3", etc … estaría efectivamente poniendo un límite al código, y potencialmente tendría que seguir adelante al código para agregar columnas.

Sugeriría hacer relaciones de 1 a muchos en lugar de hacer relaciones de muchos a muchos. Puede lograr esto teniendo una tabla que mapea entre su tblTicket y tblEngineer . Por ejemplo:

 tblEngineer ----------- (PK) iEngineerID tblTicket --------- (PK) iTicketID tblTicketEngineerMap -------------------- (PK) iMapID (FK) iEngineerID (FK) iTicketID 

Al hacerlo de esta manera, un Ingeniero y un Ticker pueden estar en muchos maps, realizando dos relaciones de 1 a Muchos y permitiendo la funcionalidad que busca.

Consulte este hilo sobre por qué debe intentar evitar los layouts de tablas de muchos a muchos.

Utilice una columna para almacenar diferentes valores lógicos: consulte este enlace http://sqlpro.developpez.com/cours/stockageopt/

enter image description here

enter image description here

Esto significa que se necesitan 3 tablas para la manipulación de datos, incluido un costo significativo para el motor de consultas relacionales.

¿Hay alguna forma de simplificar esto integrando todos estos datos dentro de la tabla Miembro?

Asignar un código a cada estado:

Methode 1: (use 2 tablas)

tblTicket (id_Ticket, Ingenieros)

Ingenieros (id_eng, otras columnas)

En tblTicket Engineers puede establecer múltiples valores como id_1 – id_2 – id_3 (1-2-3) 3 ingenieros

Methode 2: (use 3 tablas)

tblticket (id_ticket, otras columnas) (key principal: id_Ticket)

ingenieros (id_Eng, otras columnas) (key principal: id_Eng)

TicketEng (Id_Ticket, id_Eng) (key principal: (id_Ticket, id_Eng))