2013-07-04 20 views
2

使用MS SQL:情景是我已经为公司中的所有联系人创建了联系人主表(tbl_Customer)。工作人员建议他们不希望看到所有的联系人,他们只会选择哪些联系人适用于他们。联系人表不会像客户端的pst文件一样存储在客户端上,而是存储在服务器端,特别是数据库中。使用主表为员工添加联系人的常见概念

我可以使用的方法是:

1)我每次添加一个员工我创建一个新的独立表的工作人员,工作人员只是增加了他/她从主表通过所需要的接触时间程序。

2.)我可以更改联系人主表添加名称为staff01,staff02等的50个字段...我将利用这些字段作为标记,表明这行客户是联系人领域的工作人员。

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

目前我很想用3.)有没有其他更好的方法来解决我的问题?

+0

如果你想使用DBMS(如SQL服务器),我的建议是开始阅读[关系模型](http://en.wikipedia.org/wiki/Relational_model)和[数据库规范化]( https://en.wikipedia.org/wiki/Database_normalization)。链接只是一个参考,而不是一个简单的阅读。有很多关于关系数据库的好书和网站。 –

回答

3

为什么你没有一个工作人员表与工作人员编号 - 然后每个联系人的工作人员想要可以在工作人员联系行。第1列是staffID,第2列是contactID。然后,您可以加入联系人表以检索所需的详细信息。

联系人表只需要更新...您只需要添加一个两列的表。您可能希望施加限制,允许输入字段,这些字段对于员工ID和联系人ID是唯一的,并且是有效的员工和联系人。 Nick。

+0

我已经有一张职员表。你的意思是我会创建一个新表来连接员工和客户表?我认为这解决了我的问题。非常感谢你。 –

+0

是的 - 新表格实际上是两列ID。 STAFFID是,使用ContactID。对于每个StaffID,可能会有多个ContactID。将联系人ID加入联系人表中以获取给定的StaffID。 – nickL

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 

这将仅返回客户用户已明确表示,他们希望看到的。

0

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

如果每个联系人只有一个工作人员,则只需添加一个带有相关工作人员ID的列,这将成为员工表的外键。

在任何情况下与其他用户借鉴:

方法1你的建议是一个很大的无无在SQL数据库设计,需要用动态创建的表一个很好的理由为DB。

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

相关问题