una tablas tabla segmentacion pivotar mostrar los dinamica datos como cambiar c# asp.net-mvc database database-design sql-server-2012

c# - segmentacion - Buscar datos de tablas dinámicas usando Microsoft SQL Server



tabla dinamica sql server (2)

Tengo una tabla de organización como esta:

OrgID | OrgInviteCode | OrgName | Status | ProjectTableName | InsertOn ------------------------------------------------------------------------------------------- 1 | RC12T67 | Organization1 | Active | Project1 | 2015-12-19 15:37:43.333 2 | BC56uI7 | Organization2 | Active | Project2 | 2015-12-19 15:37:43.333 3 | ORG1456 | Organization3 | Active | Project3 | 2015-12-19 15:37:43.333 4 | ORG2856 | Organization4 | Active | Project4 | 2015-12-19 15:37:43.333

Y tengo un procedimiento almacenado para crear una tabla dinámica para el proyecto.

Si alguna organización nueva se crea con éxito, llamamos al procedimiento almacenado para crear la tabla del proyecto para esa organización.

Cada organización tiene su propia tabla de proyectos. Entonces el nombre de la tabla del proyecto es dinámico para cada organización y su nombre está almacenado en la tabla de la organización.

Organización1 -> Tabla de proyectos

ProjectID | OrgID | ProjectName | ProjectInvideCode | Address1 | Address2 | City |State | ZIP | Country ------------------------------------------------------------------------------------------------------------------------------- 1 | 1 | Org1Proj1 | XJ34590 | 235 Harrison St. | | Syracuse | AK | 23456234 | US 2 | 1 | Org1Proj2 | JKI8907 | 35 Sterling St. | | Syracuse | NY | 23456456 | US

Organization2 -> Tabla de proyectos

ProjectID | OrgID | ProjectName | ProjectInvideCode | Address1 | Address2 | City |State | ZIP | Country ------------------------------------------------------------------------------------------------------------------------------- 1 | 2 | Org2Proj1 | RUIO90 | 90 Ram St. | | Los Angeles | CA | 23456234 | US 2 | 2 | Org2Proj2 | KLOP907 | 35 Wide St.| | Chicago | IL | 23456456 | US

Actualmente estoy trabajando en la integración de la función de búsqueda. Los usuarios o usuarios anónimos pueden buscar datos según la siguiente lógica:

  • Busque con el nombre de la organización o el código de invitación de la organización.
  • Busque con el nombre del proyecto o el código de invitación del proyecto.
  • Buscar con la dirección del proyecto, ciudad, estado, país

Sé que es muy sencillo encontrar el resultado de búsqueda para el nombre de la organización y el código de la invitación, porque todo el contenido reside en la misma tabla.

Pero es más complicado obtener el resultado de búsqueda para los proyectos (nombre o código de invitación) debido al nombre de la tabla dinámica. Encontré este enlace en Cómo obtener datos de varias tablas dinámicas? , así que creo que no es una solución mejor porque la búsqueda necesita ser muy rápida.

La razón por la que separamos las tablas de proyectos se basa en la organización porque en nuestro requerimiento mencionan claramente que "Tenemos 1000000 organizaciones, pero cada organización tiene más de 1 millón de proyectos". Espero que comprenda el concepto de que no queremos volcar los proyectos 1000000 (Organización) * 1 Millón = XXXXXX en una sola tabla.

Preguntas:

  • ¿Cómo podemos buscar los datos de los proyectos de manera efectiva?
  • ¿Nuestro proyecto separa el concepto de mesa es el peor? ¿Tienes alguna sugerencia para manejar mejor?
  • ¿Hay alguna forma efectiva en C #?

Herramientas y tecnología:

  • Asp.Net 4.5, C #
  • MVC 5
  • Primero el código de Entity Framework
  • SQL Server 2012

Creo que puedes crear VIEW combinando todas las tablas de proyectos

SELECT REPLACE( REPLACE( REPLACE( ( SELECT DISTINCT ''SELECT * FROM Organization O JOIN '' + ProjectTableName + '' PT ON O.OrgId = PT.OrgId WHERE O.OrgId = '' + convert(varchar(10), OrgId) as [text()] FROM Organization FOR XML PATH (''DELIMITER'') ), ''</DELIMITER><DELIMITER>'', '' UNION ALL ''), ''</DELIMITER>'', '''') ,''<DELIMITER>'', ''CREATE VIEW Organization_Projects AS '')

debe estar bastante cerca de las consultas en las tablas de origen.


Si desea una búsqueda más rápida, puede hacerlo comprometiéndose durante el tiempo de escritura / inserción. Fuera de los siguientes tres puntos:

  • Busque con el nombre de la organización o el código de invitación de la organización.
  • Busque con el nombre del proyecto o el código de invitación del proyecto.
  • Buscar con la dirección del proyecto, ciudad, estado, país

Primero es straigt adelante como dijiste. Veamos 2 y 3. Sugeriría una manera genérica por la cual usted puede manejar ambos puntos, tomemos la dirección como ejemplo.

  1. Crear una dirección de tabla con la columna ID de dirección y dirección, almacenar solo la dirección única en esta tabla. Puede hacer que la dirección sea una clave única. Almacenar ID de dirección en la tabla Organización y Proyecto y no completar la dirección. Esto ahorrará espacio y evitará errores ortográficos
  2. Cree la tabla OrganisationAddressMap con el ID de la columna, ID de dirección, Id del proyecto y Id de organización. Almacenar solo fila única en esta tabla
  3. Cuando busca una dirección, mire en las dos tablas anteriores para identificar ID de proyecto y ID de organización relevantes. Y luego, basándonos en estos dos identificadores consultamos la tabla correcta.

En la situación anterior, buscará menos filas para la dirección. De forma similar, cree dos tablas para cada término de consulta, como nombre de proyecto, código de invitación de proyecto, ciudad, estado y país.