我有一個表USER
(USER_ID,PASSWORD,NAME,...)和表ACCESS_ROLES
爲用戶,每個用戶可以有一個ACCESS_ROLE
(一對一)。數據庫設計,哪個表有外鍵
Wich表有外鍵嗎?
我會把USER_ID
轉換成ACCESS_ROLES
表。有沒有最佳實踐方法?
我有一個表USER
(USER_ID,PASSWORD,NAME,...)和表ACCESS_ROLES
爲用戶,每個用戶可以有一個ACCESS_ROLE
(一對一)。數據庫設計,哪個表有外鍵
Wich表有外鍵嗎?
我會把USER_ID
轉換成ACCESS_ROLES
表。有沒有最佳實踐方法?
由於您將具有一比一的關係,由菲利普·凱利提出的解決方案是更好的。就在USER
稱爲access_role_id
添加一個新列,然後做這樣的USER
表的外鍵:
ALTER TABLE USER ADD CONSTRAINT fk_access_roles_users
FOREIGN KEY (access_role_id)
REFERENCES ACCESS_ROLES(access_role_id);
不要添加USER_ID
到ACCESS_ROLES
表,如你所說。
如果你有一對一的映射,我會把外鍵放到你將要查詢大部分時間的表中。
如果你有一組固定的訪問角色和任意數量的用戶,其中一個用戶分配一個且唯一一個進入角色,並且可以分配給定的訪問規則[任意數量的用戶,這是我如何理解你的問題],那麼你會在你的USERS表中放入一個類似「AccessRoleId」的列,並將一個外鍵約束添加到ACCESS_ROLES中。
不應該將外鍵約束放入USER表中嗎? – 2009-12-08 18:09:01
根據你的回覆,沒有。如果UserId是Access_Roles中的列,並且是用戶中的FK,那麼這意味着每個訪問角色都與一個且只有一個用戶相關聯......並且潛在地,許多用戶將不具有分配的訪問角色。 – 2009-12-08 22:36:16
@DanielVassallo將外鍵約束應用於ACCESS_ROLES表,以防止人們刪除access_roles中的記錄(如果有任何引用它們的用戶記錄) – 2016-08-23 17:06:18
不知道我是否理解這個問題:我認爲access_table應該有外鍵。
如果您不確定該問題,請不要浪費寶貴的時間來回答這個問題。 – 2017-05-02 04:29:26
然後:
注意:外鍵「父」列必須是唯一的約束。如果每個ACCESSROLE中,FK 多個用戶必須從USERS到ACCESSROLES
在SQL Server
ALTER TABLE USERS WITH CHECK ADD
CONSTRAINT FK_USERS_ACCESS_ROLES FOREIGN KEY (ACCESS_ROLE) REFERENCES ACCESS_ROLES (ACCESS_ROLE /*PK?*/)
您可以添加一個外鍵ACCESS_ROLES
及以下執行一個一個映射
UNIQUE (ACCESS_ROLES_ID, USER_ID)
是否有任何的最佳做法Appro公司ACH?
是的,有!
與primary key
一樣,foreign key
也是放置在表格中的一列或多列上的constraint
類型。
foreign key
在另一個表中的鍵列和相關列之間建立鏈接。 (您也可以將外鍵列鏈接到同一表中的列。)
包含該外鍵的表被視爲子表,並且該外鍵引用的表是父表。
要點
foreign key
必須引用primary key
或unique constraint
,雖然該參考可以是在同一個表上或不同的表。foreign key
還必須具有與引用約束中的列數相同的列數,並且數據類型必須在相應的列之間匹配。Primary key
不同,Foreign key
列可以包含NULL
值。至少部分內容是從https://www.simple-talk.com/sql/t-sql-programming/questions-about-primary-and-foreign-keys-you-were-too-shy-請問/ - 請給原作者一分錢。 – 2017-07-04 05:53:46
這是一對一映射嗎? – tosh 2009-12-08 17:53:13
如果是One-To-One,那麼聽起來好像所有人都應該進入同一張桌子?那真的取決於你需要什麼。 – 2009-12-08 17:59:05
聽起來更像多對一(許多用戶可以有一個access_role) – 2016-08-23 17:08:20