0

我正在制作一个客户端管理应用程序,我在其中存储 和employeeadmin数据company。未来该数据库将有数百家公司注册。我正在考虑寻找数据库设计的最佳方法。

我可以想到两种方法:

  1. 为每家公司分别制作所有应用表
  2. 将所有数据存储在应用程序数据库中

你能建议最好的方法吗?

请注意,所有 3 个表都基于 id 链接,并且将有数百家公司,每个公司将有很多 admin,每个 admin 将有数百名员工。处理安全性和查询性能的最佳方法是什么

4

5 回答 5

1

根据您提供的部分信息,您需要 3 个规范化表,以及查找和其他内容等辅助数据。

但是当你设计一个数据库时,你需要考虑更多的点,比如安全性、可见性、客户端访问方法等

例如,如果您想确保隔离,并且不允许用户对其他数据有任何可见性,您可以为每个公司动态创建一个模式,为每个模式动态创建用户和访问权限。然后你需要在 DAL 中支持这些东西,实际上它会很胖。

DAl 的另一种方法是公开总是返回一个公司的子集的视图。

我建议采用标准化方法的一个重要原因是这样维护会容易得多。

从 SQL 的角度来看,我认为拥有许多表或只有 3 个表没有任何性能优势,索引的效率和智能 DAL 会有所作为。

于 2013-07-06T13:02:04.720 回答
1

这是我分享最多的网络业务服务的一个经典问题:对于所涉及的因素的讨论,谷歌“多租户架构”。

您几乎肯定希望将所有公司放入一组通用表中:每个数据表都应该引用公司键,并且所有查询都应该加入该键以及其他标准。这可以实现最佳的整体性能,并为您节省数百次重复视图、存储过程等的潜在维护噩梦,或者如果您希望添加字段或表,则必须对数百个表应用相同的结构更改.

为了帮助确保您不会无意中混合来自不同客户的数据,通过一组经过验证的存储过程(所有这些都将公司 ID 作为参数)进行所有数据访问可能会很有用。

数百个并行数据库不会很好地扩展:数据库服务器将不断地将表和索引从内存中推出以适应下一个查询,从而导致磁盘抖动和性能下降。这条路只有痛苦。

于 2013-07-08T05:33:32.210 回答
1

查询的性能不太取决于表的大小,但更多地取决于您在该表上拥有的索引。所以您需要根据您的要求放置聚集和非聚集索引,我可以保证多达 10 GB 的数据您不会遇到任何问题

于 2013-07-06T11:50:08.977 回答
0

根据您的应用程序的用例,没有“最佳”方式。请说明您的应用程序将提供的操作,以便我们进一步了解您的问题。

要存储的数据似乎是结构化的,因此乍一看关系数据库会运行良好,但请坚持我上面标记的点。

于 2013-07-06T11:44:26.160 回答
0

您根本没有说这些数据如何链接,或者它们之间是否存在任何链接。但是,猜测一下,您需要 3 张桌子。

  1. 员工表
  2. 管理表
  3. 公司表

每个都有所需的属性,如果没有其他信息,我无法提供更多指导。

于 2013-07-06T11:48:15.300 回答