2013-02-25 67 views
0

我有一個表Users建議:需要對錶關係

[UserId] [int] IDENTITY(1,1) NOT NULL, 
    [UserName] [nvarchar](20) NOT NULL, 
    [Email] [nvarchar](100) NOT NULL, 
    [Password] [nvarchar](128) NOT NULL, 
    [PasswordSalt] [nvarchar](128) NOT NULL, 
    [Comments] [nvarchar](256) NULL, 
    [CreatedDate] [datetime] NOT NULL, 
    [LastModifiedDate] [datetime] NULL, 
    [LastLoginDate] [datetime] NOT NULL, 
    [LastLoginIp] [nvarchar](40) NULL, 
    [IsActivated] [bit] NOT NULL, 
    [IsLockedOut] [bit] NOT NULL, 
    [LastLockedOutDate] [datetime] NOT NULL, 
    [LastLockedOutReason] [nvarchar](256) NULL, 
    [NewPasswordKey] [nvarchar](128) NULL, 
    [NewPasswordRequested] [datetime] NULL, 
    [NewEmail] [nvarchar](100) NULL, 
    [NewEmailKey] [nvarchar](128) NULL, 
    [NewEmailRequested] [datetime] NULL 

這個表有1對1的關係Profiles

[UserId] [int] NOT NULL, 
    [FirstName] [nvarchar](25) NULL, 
    [LastName] [nvarchar](25) NULL, 
    [Sex] [bit] NULL, 
    [BirthDay] [smalldatetime] NULL, 
    [MartialStatus] [int] NULL 

我需要user連接到所有其他表在數據庫中,所以它是更好的:
1)使從Users到其他表的關係?
2)從Profiles到其他表的關係?

+0

你是什麼意思的「連接」?您是在談論構建一個查詢來從包含[UserID]列的所有表中提取信息,還是您想要設置其他表中的外鍵? – 2013-02-25 23:05:33

+0

在其他表中設置外鍵。在表格之間建立正常關係。 – 1110 2013-02-25 23:07:06

回答

2

由於表[用戶]包含標識值,因此[UserID]值的起源處,我將創建所有外鍵返回給它。從性能的角度來看,假設您在[UserID]列上設置的兩個表上都有聚簇索引,則性能影響應該很小。

從技術上講,我猜[Users]表可能包含更多的每行數據,因此索引可能會跨越更多頁面,並且查找可能有毫秒差異,但我認爲將它與表關聯起來更有意義創建了[UserID]並且名稱相似。也就是說,你真的可以做任何一個。

0

如果Profiles的PK是FK到Users,我會保持一致性並使用Users作爲數據庫中其他關係中的父表。

但是,如果它是真正的一對一而不是一對一或一對一的關係,那並不重要。

另一個考慮因素是數據庫中的數據如何被任何應用程序訪問。應用程序是否使用了知道FK關係的OR/M,如實體框架?如果是這樣,請考慮使用哪個表具有通常基於子表通過查詢訪問的列。例如,應用程序可能會在整個地方顯示Profiles.LastNameProfiles.FirstName,而且很少從Users表中讀取任何內容。在這種情況下,您可以通過在Profiles表之外建立關係來爲數據庫保存一些I/O併爲開發人員節省一些擊鍵。