2013-07-04 51 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是不好的做法,因爲大部分空間將被浪費掉(除非定義爲稀疏列,但即使..仍然佔用空間),也太具體的 - 當你添加一個新的工作人員會發生什麼?添加一個新的列?鎖定整個數據庫並添加許多浪費的空間分配?

相關問題