【发布时间】:2013-12-02 22:21:54
【问题描述】:
我正在创建一个最好描述为 CRM 的应用程序。有一个相对复杂的表结构,我正在考虑允许用户进行一些自定义(添加字段等)。一个担忧是我几乎会立即达到一定的规模。我们有大约 50,000 名个人用户,他们将在发布后的大约九个月内上线。所以我想建立持久。
我正在考虑两个甚至三个选项。
一个表集在所有内容上都有一个 userID 列,并具有一个自定义属性表,该表是通过创建一个索引自定义属性的表创建的,然后是另一个具有其值的表,然后可以将其连接到现有的联系人记录用户。 -- 从我读到的内容来看,这似乎是正确的选择,但我一直觉得它不是。似乎一旦这些表开始达到数百万条记录,在每个查询中只搜索一个用户记录,就会成为数据库中的大猪。
为每个用户帐户重新创建表集,并使用唯一标识符(例如 userID)进行修饰。然后,而不是使用 WHERE userID=?我可以在任何地方使用 FROM ?_contacts。对于属性,我可以有一个自定义属性表,用户可以在其中为自定义属性添加额外的列。 -- 这感觉像是最简单的方法,当然,当我决定更改数据库结构时,肯定会从地狱迁移。
第三个选项,我很有信心是错误的,但仅出于这个原因,我不能排除应该为每个用户创建一个包含所有必需表的新数据库。
我疯了吗?选项一真的是最好的吗?
【问题讨论】:
-
50,000 个用户。有多少家公司?
-
这个答案可能很有用 - stackoverflow.com/a/876459/1048425
-
@MikeSherrill'Catcall' 我讨厌人们都对他们的 IP 细节一无所知,但在这种情况下我不得不这样做。最终结果是,虽然应用程序在结构上类似于 CRM,但它不是一个,因此 50k 用户不会在他们的组织内共享数据。
标签: sql sql-server database