我们需要知道哪种数据库体系结构更有意义以及为什么使用。
我们有一个将使用相同表结构的客户列表(例外情况很少)。
我们大约有1万个客户,每个人可能都拥有大约5万种产品。
每个客户对产品的处理可能并不相同,我们还希望提供一个计划,使客户可以通过API访问其数据。
我们的客户确实销售产品,并且他们的SQL表结构都包含诸如:
的列 Feed_ID
用于区分这些产品的来源,并且对每个客户都是唯一的-当然。
我们考虑过的三种关系表结构选择:
每个客户都有其自己的数据库,并且在该数据库中,每个产品Feed都有1个表
所有客户都托管在1个唯一的数据库中,在该数据库中,所有客户每个供稿都拥有1个表-在这种情况下,如果1个客户作为2个不同的产品供稿,则可以拥有2个表。
所有客户都托管在1个唯一的数据库下,但是,在第3个解决方案中,我们只有1个唯一的表托管所有客户的所有产品供稿。
您将使用哪种解决方案?为什么您认为选择的解决方案更好?
谢谢。
答案 0 :(得分:3)
您还没有提供足够的信息。在几乎所有情况下(例外情况请参见下文),您希望为所有客户提供一组表。原因如下:
毫无疑问,我错过了一些原因。您会发现,拥有具有少量表的单个数据库几乎是不费吹灰之力。
在某些情况下可能需要单独的数据库。我想不出在单个数据库中为每个客户端使用单独的表的充分理由。
第一原因是安全性和隔离性。将数据存储在“物理上”独立的数据库中可能有商业或什至法律原因,以进一步降低一个客户端(意外地或通过黑客攻击)看到另一客户端数据的可能性。
另一个原因是客户有定制的解决方案。也就是说,有每个客户端的自定义项。我仍然倾向于尝试将其放入单个数据库解决方案中,但这可能是不可能的。
与此相关的是您打算在云和本地均支持的应用程序。在这种情况下,每个客户端使用单独的数据库可能会简化应用程序设计。
但是,通常,您会将数据存储在一个相当标准化的单个数据库中,每个实体只有一个表。
答案 1 :(得分:1)
我认为为每个客户提供单独的表(或理想的架构)并不是一个坏主意。除了您提到的好处外,这种方式还可以轻松扩展数据库,并且可以让客户完全控制他们的数据。
关于缺点:
此外,如果您的表将具有数亿行(10Kx50k?),则最好将其拆分为较小的块,而不管您选择哪种选项。如果不是按客户划分,则按地区或其他更大的群体划分(假设您在本地RDBMS上构建)