千行的最佳数据库设计是什么

时间:2010-09-28 20:55:21

标签: sql-server database-design database-normalization

我即将启动数据库设计,只需管理公司下的用户。

  • 每家公司都有一个可以管理用户的管理区域
  • 每家公司将拥有约25.000名用户
  • 客户认为有大约50家公司开始

我的主要问题是

我应该根据公司创建表格吗?像

users_company_0001 users_company_0002 users_company_0003 ...

因为每个公司永远不会使用“其他”用户,并且不需要在所有user_company中对不同的表进行求和/计数(一个简单的JOIN就可以解决这个问题,尽管它会更加昂贵(时间)它会起作用拥有主要图片,这将永远不需要。

或者我应该创建 users表来拥有(50 x 25000) 1 250 000 用户(并且还在增长)。

我正在考虑第一个选项,但是,我不确定如何在这样的布局上使用Entity Framework ...我可能需要回到90年代并手动生成我的数据逻辑层。

对包含公司标识

的商店程序进行简单调用
  

你会建议什么?

系统应用程序将是 ASP.NET (可能是MVC,我仍然试图解决这个问题,因为我所有的知识都是关于webforms的,尽管我看到Scott Hanselman MVC视频 - 接缝很容易 - 但我知道问题不会那么容易,我会花更多时间来修复它们,加上 Microsoft SQL

4 个答案:

答案 0 :(得分:9)

尽管您已将此描述为1-many关系,但我仍然将数据库设计为多对多,以防止未来需求的变化。类似的东西:

alt text

答案 1 :(得分:7)

使用了数TB的SQL Server数据库,并且在我的职业生涯中拥有数百万个表的经验,数百万行,我完全可以告诉你,SQL Server可以处理你的{{1没有分区的表和company表。它总是存在于您需要它的时候,但您的担心不应该是关于您的表 - 选择最符合您需求的模式。如果你想做一些事情来优化性能,你的瓶颈肯定会是你的磁盘。不要购买大而慢的磁盘。获取一堆小的高RPM磁盘,并尽可能地将数据传播到它们之间,并且不要与日志和数据共享磁盘。使用数据库,您几乎总能通过良好的硬件,良好的磁盘子系统和正确的索引来实现性能。不要为了预期性能而妥协并使您的架构复杂化 - 您会后悔的。我已经看到了很大的数据库,这些东西是必要的,但你的不是它。

答案 2 :(得分:3)

re:我应该根据公司创建表吗?

users_company_0001 users_company_0002 users_company_0003

不,喜欢

companyID  companyName, contactID

或者我应该创建一个用户表来拥有(50 x 25000)1 250 000个用户(并且还在增长)

答案 3 :(得分:1)

我认为你应该为公司和用户创建单独的表。然后 连接两者的第三个表:CompanyAdmin。类似的东西:

  • 公司 Company_Id ,Company_name,...)
  • 用户 User_Id ,User_name,...)
  • CompanyAdmin Company_id ,User_id)

通过这种方式,您可以在不影响号码的情况下添加用户和/或公司 您需要管理的表格。在您需要的地方,这通常是一个糟糕的设计 在将新数据(公司)添加到系统时修改数据库(即添加表格)。

使用正确的索引,包含的数据库中的连接成本 几百万行应该不是问题。

最后,如果您需要更改或记录有关的其他信息 公司,用户或他们之间的关系,这个设置应该 对您的申请影响最小。