1

我想設置一個外鍵到默認的成員表,但我在嘗試定義它時出錯。我使用默認的aspnet_Users表和我自己的Posts表。我試圖安裝表如下:ASP.NET成員資格提供程序:定義一個外鍵到aspnet_Users.UserName

aspnet_Users

  • 用戶ID(PK)唯一標識符
  • 用戶名爲nvarchar(256)

帖子

  • 帖子ID( PK)int
  • UserName(FK - > aspnet_Users.Use RNAME)爲nvarchar(256)

然而,當我嘗試設置此使用VS 2010的設計師,它給了我下面的錯誤:

The columns in table 'aspnet_Users' do not match an existing primary key 
or unique constraint. 

這是不工作,因爲aspnet_Users.UserNameaspnet_Users的部分PK?我試圖改變表格,將其作爲PK的一部分(我認爲這使它成爲一個複合鍵?),但它告訴我先刪除關係,然後才能做到。由於我不知道默認會員表定義的關係,我寧願在走這條路線之前瞭解更多。

回答

3

錯誤消息完全描述了情況 - 您試圖在外鍵約束內使用非鍵字段。你建議嘗試創建一個組合鍵來解決這個問題,這將起作用,但爲什麼你不簡單地使用現有的主鍵?

UserID字段是唯一標識符PK,因此它已經配置爲在FK中使用。而且,您將使用規範化,因此您不必在每行上爲每個用戶名存儲(最多)256個字節,而只需存儲uniqueidentifier(16個字節)。

+0

我忘了回答我自己的問題,因爲很久以前我問過這個問題。我會接受你的回答,因爲它是正確的,而不是自我回答。我最初的關注點來自於在URL中使用uniqueidentifier以及由此產生的任何可能的性能和可讀性問題。我習慣於使用整數作爲PK來傳遞,所以這是我真正不瞭解的,我的許多擔憂都是基於錯誤觀念。 –

1

我認爲你需要將它與ApplicationID結合起來。除與應用程序ID結合使用外,用戶ID不唯一。

+0

雖然你的回答是正確的,但我決定將Dave's標記爲答案,因爲他的評論準確地反映了我當時的誤解。謝謝您的回答。 –

相關問題