如何为每个注册用户创建一个空白数据库,或者它已经在ASP MVC4中实现了?他们会有不同的数据库吗?例如,在存储联系人的应用程序中,我希望不同的用户可以创建自己的联系人列表。
如果我有ContactsController
,我只想编辑注册用户,我应该写这样的东西吗?
[Authorize]
public class ContactsController : Controller
修改 感谢Bhushan,我不知道User ID会存储不同的数据。在Contact表中我有ContactId,它与联系人数据相关并且有一个主键,我应该在同一个Contact表中添加例如UserId将它与注册用户ID相关联? UserId应该有主键吗?
答案 0 :(得分:4)
如果我理解你的问题:
不同的用户可以创建自己的联系人列表
上述任务不需要单独的数据库,您可以通过在Contacts
表中添加字段Users
或类似名称来将ContactOwner
与Contact
相关联User ID
。
因此,您的联系人表格如下所示:(表名称:联系人)
|ContactID | ContactType | ContactName | ContactOwner |
|0123456789 | MOBILE | Mr. ABC | USER1 |
|email@email.com | EMAIL | Mr. ABC | USER1 |
|0123456789 | MOBILE | Mr. PQR | USER1 |
|0123456789 | MOBILE | Mr. XYZ | USER1 |
|0123456789 | MOBILE | Mr. LMN | USER2 |
|0123456789 | MOBILE | Mr. AAA | USER3 |
因为您可以看到上面的示例表,您可以确定哪个ContactID
属于哪个User
?或者User
创建的联系人是哪个?
在这种情况下,您必须使用其他主键创建ContactOwner
主键(复合键),以确保一个联系人可以由多个用户拥有/创建。
更新1
要获取特定用户创建的联系人,您可以编写如下查询:
Select * from CONTACTS where ContactOwner = 'USER1'
以上查询将为您提供USER1
创建/拥有的联系人,而不是其他用户创建的联系人。所以你的结果将使用上面的查询包含以下记录:
|ContactID | ContactType | ContactName | ContactOwner |
|0123456789 | MOBILE | Mr. ABC | USER1 |
|email@email.com | EMAIL | Mr. ABC | USER1 |
|0123456789 | MOBILE | Mr. PQR | USER1 |
|0123456789 | MOBILE | Mr. XYZ | USER1 |
更新2
您的查询将是一个动态查询,ContactOwner
将成为USER
登录的人。This和This可能会帮助您编写动态查询(已准备好声明)[注意:因为我是Java
开发人员所以我不知道C#
中用于编写动态查询的合适语法。]
答案 1 :(得分:4)
如果您希望每个用户都有一个空数据库,只需在注册过程中添加一部分即可创建新数据库。您可以使用SQL语句轻松完成此操作(CRATE DATABASE,然后是CREATE TABLE和其他create语句来创建模式)。您也可以使用SMO复制现有的模板数据库。您也可以使用实体框架数据库优先创建它(只需很少的调整,比如修改连接字符串)。但是,所有这些选项都不建议用于您的方案。
如果您想为每个用户提供他的联系人列表,只需添加到“联系人”表“OwnerUserID”列或类似名称,这将与您的用户表具有FK关系,并将包括此行的用户属于。在您的查询中,只需按此过滤并向每个用户显示他自己的联系人列表。
通过这种方式,您可以更轻松地管理事物并在将来添加/修改内容。此外,与您在问题中提到的多个数据库一起工作会给您带来很多痛苦,几乎没有任何好处(在大多数情况下)。
祝你好运。
答案 2 :(得分:0)
仅供参考,例如: SQL Server 2012,最大数据库数为32,767。
请不要为每个用户创建一个新的数据库,它首先违反了基本逻辑和关系数据库的要点。使用表和外键以及诸如此类的东西。