3

使用 MS SQL:场景是我已经有一个联系人主表 (tbl_Customer) 用于公司中的所有联系人。工作人员建议他们不想看到所有的联系人,他们只会选择适合自己的联系人。联系人表不会像 Outlook 的 pst 文件那样存储在客户端上,而是存储在服务器端,尤其是数据库上。

我可以使用的方法是:

1.)每次我添加员工时,我都会为员工创建一个新的独立表,员工只需通过程序从主表中添加他/她需要的联系人。

2.)我可以更改联系人主表以添加 50 个字段,名称分别为 Staff01、staff02 等...我将使用此字段作为标记,表明这一行客户是字段上员工的联系人.

3.) 我做了一个全新的联系人列表。添加字段名称“用户”。通过在字段名称上加上“ALL”来标记初始记录。如果员工添加了联系人,表格会在“用户”字段中添加一条记录,其中包含他/她的姓名。将有一个自动编号的字段作为主索引。

目前我很想使用3。)还有其他更好的方法来解决我的问题吗?

4

3 回答 3

3

为什么你没有一个带有员工 ID 的员工表 - 那么有问题的员工想要的每个联系人都可以在 staffContacts 中成为一行。第 1 列是人员 ID,第 2 列是联系人 ID。然后,您可以加入联系人表以检索您想要的详细信息。

然后只需要更新联系人表...您只需添加一个包含两列的表。您可能希望施加约束,允许输入对员工 ID 和联系人 ID 唯一且是有效员工和联系人的字段。缺口。

于 2013-07-04T23:22:22.727 回答
0

如果许多员工有相同的相关联系人 - 您应该使用一个连接表,其中将有 2 列 - 一个带有联系人 id ,一个带有员工 id ,使用此表查询员工的相关联系人。

如果每个联系人只有一个员工,那么只需添加一个具有相关员工 ID 的列,这将是员工表的外键。

无论如何,供其他用户学习:

您建议的方法 1在 SQL DB 设计中是一个很大的禁忌,对于具有动态创建表的数据库,您需要一个非常好的理由。

方法 2是不好的做法,因为大部分空间将被浪费(除非定义为稀疏列,但即使.. 仍然占用空间)而且过于具体 - 添加新员工时会发生什么?添加一个新列?为它锁定整个数据库并添加许多分配的浪费空间?

于 2013-07-04T23:30:10.850 回答
0

如果我理解正确,您想要一个根据特定用户偏好专门过滤的联系人列表?

我个人会创建另一个这样的表:

Create Table UserContactPreferences
(
ID int identity(1,1),
UserID int,
ContactID int,
)

然后每个用户都可以选择他们想要显示的联系人,您可以在此处添加一个条目。

然后,当您查询数据库时,您可以执行以下操作,在查询中传入 CurrentUser:

SELECT c.*
FROM tbl_Customer c
JOIN UserContactPreferences up on c.contactID = up.contactID
WHERE up.UserID = @CurrentUser

这将只返回用户明确表示他们想查看的客户。

于 2013-07-04T23:26:22.613 回答