我具有設計2個簡單的表格如下所示:在 'table_XXX' 的列不匹配現有primiary鍵或唯一約束
用戶:
類別:
現在我想將用戶名設置爲分類表上的外鍵,所以這就是我所做的但得到的錯誤如下圖所示:
我做了正確的方式?或者任何人都可以建議我這樣做的正確方法?
* NOTE:我試圖從2個表中刪除主鍵,並將它們添加回來並嘗試,但是向我顯示相同的錯誤。
我具有設計2個簡單的表格如下所示:在 'table_XXX' 的列不匹配現有primiary鍵或唯一約束
用戶:
類別:
現在我想將用戶名設置爲分類表上的外鍵,所以這就是我所做的但得到的錯誤如下圖所示:
我做了正確的方式?或者任何人都可以建議我這樣做的正確方法?
* NOTE:我試圖從2個表中刪除主鍵,並將它們添加回來並嘗試,但是向我顯示相同的錯誤。
你不是這樣做的 - 因此錯誤。如果您需要名稱,請將userid放入您的類別表中並加入用戶。實際上,如果該字段代表創建該類別的人,則應將其命名爲CreatedByUserId。它應該仍然引用users.userid。
Baracuk-是的,我已經嘗試過它的用戶名和它的工作。只是我看到網上的一些人建議他們可以使用任何列名作爲FK – coder
只是因爲你可以不意味着你應該。根據你的應用程序的細節,你嘗試設置這個外鍵可能是一個僞裝的祝福。缺少對用戶名的唯一限制可能會導致其他問題。 –
外鍵約束不必僅鏈接到另一個表中的主關鍵約束;它也可以定義爲在另一個表中引用 UNIQUE約束的列。
在Create Foreign Key Relationships
你必須要設置在表的用戶成爲制約用戶名是唯一的。
嘗試在表Categories
中更改外鍵字段的名稱。 它似乎用自己的名字「autowire」字段。我的意思是:將Categories.username
更改爲Categories.userid
。
如果您要在屏幕截圖中設置外鍵關係,則表中用戶的列用戶名必須具有唯一性約束。
在Users
表中的username
列中強加unique constraint
。然後您可以創建FK,如圖所示。這就是說,在兩張表中都有username
並不是一個很好的設計。您應該刪除username
並在Categories
表中包含userid
,並將其作爲FK。
您有使用唯一標識符作爲主鍵的原因嗎?默認情況下,您的主鍵將是您的集羣密鑰,並且您最終會遇到一些使用[GUID作爲集羣密鑰]的實際性能問題(http://www.sqlskills.com/blogs/kimberly/guids-as-primary -keys-andor-the-clustering-key /) – GarethD
@ Gareth-Yes我使用的是GUID作爲主鍵,但是今天當我搜索時,我發現了你所說的,因爲它有一些實時問題。那麼你能告訴我更好的方法嗎? – coder
親愛的主席先生「@coder」,我的印象是,你不知道數據庫設計的基本原理。你只是在做「某事」,而不知道該做什麼。在這裏,您正在嘗試引用「用戶名」而不是「userid」,這可能會破壞數據庫設計的最基本規則!我誠懇地建議你在編碼之前花點時間閱讀數據庫設計原則。特別閱讀**數據庫規範化**。你會發現許多文學無處不在。 –