2010-09-28 17 views
5

Estoy a punto de iniciar un Database Design que simplemente administrará los usuarios en las empresas.¿Cuál es el mejor diseño de base de datos para miles de filas

  • Cada empresa tendrá un área de administración que se pueden administrar a los usuarios
  • Cada empresa tendrá alrededor de 25.000 usuarios
  • cliente cree que tiene alrededor de 50 empresas para comenzar a

Mi pregunta principal es

¿Debo crear tablas basadas en las empresas? como

users_company_0001users_company_0002users_company_0003 ...

ya que cada empresa nunca va a usar "otros" usuarios y nada tendrán que resumir/cuenta diferentes mesas en toda user_company (un simple JOIN hará el truco, aunque es más caro (tiempo) que funcionará como tener la imagen principal, esto nunca va a ser necesario.

o debo crear una mesa users que tiene (50 x 25000) usuarios (y creciente)

Estoy pensando en la primera opción, sin embargo, no estoy seguro de cómo usaría Entity Framework en dicho diseño ... Probablemente necesitaría volver a los 90 y generar mi Data Logic Layer a mano .

tiene que será una simple llamada a procedimientos memoria que contiene la identificación de la compañía

¿Qué va a sugerir?

La aplicación del sistema será ASP.NET (probablemente MVC, todavía estoy tratando de resolver esto como todos mis conocimientos está en formularios web, aunque vi vídeos de Scott Hanselman MVC - costuras fácil - pero Sé que no será tan fácil ya que los problemas vendrán y tomaré más tiempo para solucionarlos), más Microsoft SQL.

Respuesta

9

Aunque haya descrito esto como una relación 1-many, Todavía diseñaría la base de datos como muchos para proteger contra un cambio futuro en los requisitos.Algo así como:

alt text

+0

¿Por qué una tercera mesa mientras que la tabla 'Usuario' puede tener' company_id'? ¿Es este un mal procedimiento? ¿Debería crear una tabla para "alojar" todos los "enlaces" entre las tablas? – balexandre

+0

Como dije, describiste una relación 1-many, por lo que agregar una CompanyID a la tabla de Usuario sería una solución válida. Elegí modelar esto como una relación de muchos a muchos para permitir un cambio futuro en los requisitos.No creo que la mesa extra cueste mucho en términos de espacio y rendimiento, y te ofrece cierta flexibilidad adicional. En última instancia, por supuesto, es su decisión. –

3

re: ¿Debo crear tablas basadas en las empresas?

como

users_company_0001 users_company_0002 users_company_0003 

no, como

companyID companyName, contactID 

o debo crear una tabla de usuarios para tener (50 x 25000) 1 250 000 usuarios (y creciente)

+0

no me sale problemas de rendimiento cuando la tabla es más de 1 millón de filas? bloquear, realizar sumas, contar mientras se está poblando de otra compañía, ¿no sería mejor mantener todo separado? – balexandre

+2

no, tenemos tablas con 10s de millones de filas, y las uniones están bien. – Beth

+1

¿Solo 1 millón de filas? Esa es una base de datos pequeña a mediana-pequeña. Tendrás problemas de bloqueo solo si escribes malas consultas. Siempre que use los índices adecuados y las consultas cuidadosas, no tendrá problemas. Si, por el contrario, se intenta actualizar todos los clientes a la vez ... –

1

Creo que se debe crear tablas separadas para la empresa y el usuario. A continuación, una tercera tabla para conectar los dos: CompanyAdmin. Algo así como:

  • Compañía (Company_id, COMPANY_NAME, ...)
  • usuario (User_Id, Nombre_de_usuario, ...)
  • CompanyAdmin (Company_id , uSER_ID)

De esta forma puede agregar usuarios y/o compañías sin afectar el número de las tablas que necesita administrar. En general, es un mal diseño en el que usted necesita para modificar la base de datos (es decir. Añadir tablas) cuando se añaden nuevos datos (empresas) en el sistema.

Con la indexación adecuada, los costos de unión en una base de datos que contiene algunos millones de filas no deberían ser un problema.

Finalmente, si alguna vez necesita cambiar o registrar información adicional acerca de Compañías, Usuarios o la relación entre ellos, esta configuración debe tener el menor impacto posible en su aplicación .

7

Al haber trabajado con una base de datos SQL Server de varios terabytes y tener experiencia con cientos de tablas en el transcurso de mi carrera con filas multimillonarias, puedo decir con total seguridad que SQL Server puede manejar un company y users tablas sin particionar. Siempre está ahí cuando lo necesite, pero su preocupación no debe ser sobre sus tablas: elija el esquema más simple que satisfaga sus necesidades. Si desea hacer algo para optimizar el rendimiento, seguramente su cuello de botella será sus discos. No compre discos grandes y lentos. Consígase a sí mismo un montón de pequeños discos de RPM altos y distribuya sus datos a través de ellos tanto como sea posible, y no comparta los discos con sus registros y sus datos. Con las bases de datos, casi siempre es mejor lograr el rendimiento con un buen hardware, un buen subsistema de disco y una indexación adecuada. No comprometa ni complique demasiado su esquema tratando de anticipar el rendimiento; lo lamentará. He visto bases de datos realmente grandes donde ese tipo de cosas era necesario, pero el tuyo no lo es.

+0

gracias por la profunda información sobre hardware, tendrá todo esto en consideración. – balexandre

Cuestiones relacionadas