2010-01-28 101 views
0

[可以]
在我的www.twipler.com項目中,我想讓人們鏈接Twitter帳戶。這將通過讓他們登錄,選擇「鏈接帳戶」然後再次登錄來實現。這將有效地給我UserId-1和UserId-2。現在我想允許用戶使用UserId-1或UserId-2憑證登錄,然後爲其他用戶檢索憑據。 (隨意發表評論,但這不是問題在SQL中存儲集合

[設置]
C#3.5,NHibernate的,TweetSharp,SQL 2005

[問題]
如何存放的「包「在數據庫中的唯一整數,查詢一個整數將返回其他相關的整數。

例如,我可能會創建一個名爲UserLinks的表,並在插入新鏈接之前計算出GroupId。它看起來像這樣

 
UserLinks GroupId UserId 
       1  12312784 
       1  18329139 
       2  19319332 
       2  14529342 
       2  21031023 

但是這感覺有點醜陋和un-NHibernate。 (更新:請注意可以有超過2個帳戶)

下面提到使用Max(GroupId)+1查找新的GroupId,但我意識到由於UserId是唯一的,我可以使用組的第一個插入的UserId作爲GroupId。

回答

1

實際上,該表看起來是關於在同一個表中將1..n個記錄鏈接在一起的正確方法。

+0

這是我最終可能做的事情,但是發現max(GroupId)+1似乎是「工作」 – 2010-01-28 22:15:03

+1

你是什麼意思'find max(groupid)'? 你爲什麼不讓數據庫確定新的groupid? 否則,您可以通過查看當前用戶已存在的groupId來計算新的GroupId? – 2010-01-28 22:18:28

+0

我看到沒有使用組的好處vs簡單的多對多關係 – 2010-01-28 22:56:23

1

爲什麼這是'un-nhibernate'? NHibernate是DB的關係模型和業務類的OO模型之間的橋樑。

以最高效/正確的方式將數據存儲在數據庫中,就像您在使用關係數據庫時通常那樣。 創建您的商務課程,以便您能夠解決問題。使用NHibernate建立這兩個範例(關係數據模型和OO)之間的橋樑。因此: 以關係方式創建您的數據庫模型。 創建您的域名類: 您可以創建一個User類,該類具有屬性「LinkedAccounts」。該屬性可以是Account對象的列表。 在你的NHibernate映射中,你可以指定NHibernate應該從哪個表中獲取數據。

+0

我希望添加到我的用戶類/實體屬性「LinkedAccounts」,這是一個主鍵數組。自己做這件事似乎是NHibernate可能爲你做的工作。 – 2010-01-28 22:14:00

+0

檢查我的編輯... – 2010-01-28 22:17:01

1

好像你只是需要一個典型的自我多對多關係,你將實現一個包含user_id_1和user_id_2作爲複合PK的表,這兩個表都是用戶表的userID的FK。

+0

然後問題是user_id_3去哪裏?它是綁定到2還是1? OP說,沒有父母用戶帳戶。另外,使用這種方法來獲取與特定登錄關聯的所有用戶帳戶的sql會有點刺激。 – NotMe 2010-01-29 14:40:07

+0

@Chris,根本不是,這是100%多的標準,user_id_3不存在,我們會有1,2和1,3。這並不難以查詢,這是微不足道的。 – 2010-01-29 19:14:57

+0

爲了得到3到2,你必須經過1。 – NotMe 2010-01-29 20:24:23