2011-03-26 82 views
0
CREATE TABLE MemberProfile 
(
    memberID, 
    memberTypeID, 
    aboutMeID, 
    memberRegID, 
    memberProfileSettingsID, 
    lastLogin datetime, 
    PRIMARY KEY(memberID) 
) 
  • memberTypeID幫助代表普通會員,金卡會員,銀卡會員等需要與數據庫表設計

  • aboutMeID代表後置/線程會告訴人們關於這個用戶。每個用戶都有關於我的頁面。屬性是:標題,正文等

  • memberRegID代表的用戶名,密碼,電子郵件,接收通知,isActive等

  • memberProfileSettingsID代表的選項,如隱藏收藏夾列表中,隱瞞年齡等

這是一個很好的設計?我不想將所有字段放在一張表「MemberProfile」中。

回答

0

看起來您與MemberID以及所有屬性都有強制的1:1關係,這意味着您可以將它們全部存儲在同一個表(memberprofile)中。這樣做會使編碼變得更容易。

知道很難執行真正的1:1關係,但可以使用觸發器完成。使用[database-design]標籤查看問題。最近有兩個關於1:1關係的問題。

我對標識符有一些評論。如果您使用額外的表進行成員設置,登錄信息等,則應從MemberProfile中刪除密鑰,並在這些表中使用MemberID,並使用外鍵引用MemberProfile。這將讓你直接使用這些表,而不需要加入到memberprofile。

像這樣:

create table memberprofile(
    member_id 
    ,membertype_id 
    ,primary key(member_id) 
    ,foreign key(membertype_id) references membertype(membertype_id) 
); 

create table profile_settings(
    member_id 
    ,some_setting 
    ,other_setting 
    ,primary key(member_id) 
    ,foreign key(member_id) references memberprofile(member_id) 
); 

現在我想起來了,我覺得AboutMeID不是1:1。你的意思是鏈接到用戶發佈的論壇帖子來介紹他自己?在這種情況下,它是1:0基數,因爲您通常必須在創建帖子之前進行註冊:)
您可以在MemberProfile中將其實現爲一個可NULL列,或者以member_id作爲主鍵和ID論壇帖子。如果你期望大多數行最終有價值,我會親自使用可空列。

是否爲您的(1:1)屬性使用一個或多個表是實現選擇。根據您的查詢模式,它可能會影響性能的好壞。

+0

好的建議!我會考慮他們。 – user311509 2011-03-26 01:40:21

0

聽起來像memberTypeID是您選擇創建的四個ID之間唯一的一對多關係。因此,建議您按照以前的方式將其分解到相關表格中,以消除重複的元素('第一範式')

其他三個似乎並不指代一對多關係(每個關係聽起來好像它對主表唯一),所以我會將其他三個的內容移回到主表中。