2015-06-12 56 views
-4

我具有設計2個簡單的表格如下所示:在 'table_XXX' 的列不匹配現有primiary鍵或唯一約束

用戶:

enter image description here

類別:

enter image description here

現在我想將用戶名設置爲分類表上的外鍵,所以這就是我所做的但得到的錯誤如下圖所示:

enter image description here

我做了正確的方式?或者任何人都可以建議我這樣做的正確方法?

* NOTE:我試圖從2個表中刪除主鍵,並將它們添加回來並嘗試,但是向我顯示相同的錯誤。

+1

您有使用唯一標識符作爲主鍵的原因嗎?默認情況下,您的主鍵將是您的集羣密鑰,並且您最終會遇到一些使用[GUID作爲集羣密鑰]的實際性能問題(http://www.sqlskills.com/blogs/kimberly/guids-as-primary -keys-andor-the-clustering-key /) – GarethD

+0

@ Gareth-Yes我使用的是GUID作爲主鍵,但是今天當我搜索時,我發現了你所說的,因爲它有一些實時問題。那麼你能告訴我更好的方法嗎? – coder

+2

親愛的主席先生「@coder」,我的印象是,你不知道數據庫設計的基本原理。你只是在做「某事」,而不知道該做什麼。在這裏,您正在嘗試引用「用戶名」而不是「userid」,這可能會破壞數據庫設計的最基本規則!我誠懇地建議你在編碼之前花點時間閱讀數據庫設計原則。特別閱讀**數據庫規範化**。你會發現許多文學無處不在。 –

回答

2

你不是這樣做的 - 因此錯誤。如果您需要名稱,請將userid放入您的類別表中並加入用戶。實際上,如果該字段代表創建該類別的人,則應將其命名爲CreatedByUserId。它應該仍然引用users.userid。

+0

Baracuk-是的,我已經嘗試過它的用戶名和它的工作。只是我看到網上的一些人建議他們可以使用任何列名作爲FK – coder

+0

只是因爲你可以不意味着你應該。根據你的應用程序的細節,你嘗試設置這個外鍵可能是一個僞裝的祝福。缺少對用戶名的唯一限制可能會導致其他問題。 –

0

外鍵約束不必僅鏈接到另一個表中的主關鍵約束;它也可以定義爲在另一個表中引用 UNIQUE約束的列。

Create Foreign Key Relationships

你必須要設置在表的用戶成爲制約用戶名是唯一的。

0

嘗試在表Categories中更改外鍵字段的名稱。 它似乎用自己的名字「autowire」字段。我的意思是:將Categories.username更改爲Categories.userid

0

如果您要在屏幕截圖中設置外鍵關係,則表中用戶的列用戶名必須具有唯一性約束。

0

Users表中的username列中強加unique constraint。然後您可以創建FK,如圖所示。這就是說,在兩張表中都有username並不是一個很好的設計。您應該刪除username並在Categories表中包含userid,並將其作爲FK。

相關問題