我即将启动数据库设计,只需管理公司下的用户。
我的主要问题是
我应该根据公司创建表格吗?像
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 。
答案 0 :(得分:9)
尽管您已将此描述为1-many关系,但我仍然将数据库设计为多对多,以防止未来需求的变化。类似的东西:
答案 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。类似的东西:
通过这种方式,您可以在不影响号码的情况下添加用户和/或公司 您需要管理的表格。在您需要的地方,这通常是一个糟糕的设计 在将新数据(公司)添加到系统时修改数据库(即添加表格)。
使用正确的索引,包含的数据库中的连接成本 几百万行应该不是问题。
最后,如果您需要更改或记录有关的其他信息 公司,用户或他们之间的关系,这个设置应该 对您的申请影响最小。