2017-10-28 89 views
0

所以我試圖爲用戶信息表創建一個適當的表關係,但最終感到困惑。創建用戶,類型和類型標題表之間的關係

下面是這種情況:

1. a **user** can have more than one **type**. 
2. where the **type** are: founder, member, and crew. 
3. for the crew type, it can have more than one **crew_title** ex: Crew Leader, PR Manager, etc. 
4. and a crew-type-user can only have one **crew_title**. 

這是我的表至今:

**user** table: 
- user_id (PK) 
- email 
- password 

**type** table: 
- type_id (PK) 
- type_name 

**user_has_type** table: 
- user_id (PK) 
- type_id (PK) 

我試圖創建型表內crew_title,就像這樣:

**type** table: 
- type_id (PK) 
- type_name 
- crew_type_title 

但我不知道是否正確的方式,因爲會有有這麼多的空單元,因爲只有7-10個用戶是船員。任何幫助將是不錯:)

回答

0

可以保持用戶和這樣的type_title之間的關係:

用戶表: - USER_ID(PK) - 電子郵件 - 密碼

類型表: - TYPE_ID(PK) - TYPE_NAME

type_title表: - type_title_id(PK) - TYPE_ID - 標題

user_type_title表: - user_type_title_id(PK) - USER_ID - type_title_id

SELECT U.*, TT.TITLE 
FROM USER U 
    LEFT JOIN USER_TYPE_TITLE UTT ON UTT.USER_ID = U.ID 
    LEFT JOIN TYPE_TITLE TT ON TT.TYPE_TITLE_ID = UTT.TYPE_TITLE_ID 

編輯:

所以在插入之前,你應該檢測哪個類型的標題發送給哪個用戶。例如,假設這是您的應用程序的儀表板屏幕,並且您正在設置用戶類型標題。在你的屏幕上,你會先選擇一個用戶(USER_ID),

SELECT * FROM USER; 

,然後一個類型,

SELECT * FROM TYPE; 

,並選擇將有該類型的類型標題類型之後。您將從那裏選擇類型標題(type_title_id)。

SELECT * FROM TYPE_TITLE WHERE TYPE_ID = <selected_typeid_from_ui>; 

所以當插入相同的場景:

INSERT INTO USER_TYPE_TITLE SET USER_ID = <selected_userid_from_ui>, TYPE_TITLE_ID = <selected_typetitleid_from_ui>; 
+0

感謝@webmaster,能否請您提供一個選擇查詢來顯示用戶名和船員職稱的示例,以便我能夠很好地理解它。 – bberry

+0

@bberry提供編輯 – webmaster

0

我有點新本..但每當我發現一個給定的表我用了一個太多的空條目,我相信用實踐來解決它被稱爲表 正常化因此,如何把這個作爲是

type_I'd(PK)

TYPE_NAME

並加入此

crew_subcategory

-User_Id(PK)

-Crew_id(FK)

crew_title

-Crew_Id(PK)

-crew_type標題

機組子類別表將只包含具有船員標題的條目 和th e船員標題表根據id提供相應的標題。這與您用於標題和標題ID的內容類似。

不確定這是否是最佳方法。讓我知道你想想看:)

+0

謝謝@Jai Lulla。你的意思是** **表**和** crew_title **表之間沒有關係嗎? – bberry

+0

Crew_type表只包含類型爲船員類型的條目,不包含創建者或成員的條目。因此,船員類型不會有任何理由知道用戶的類型... – Jai

0

我想:

用戶表: - USER_ID(PK) - 電子郵件 - 密碼

類型表: - TYPE_ID (PK) - type_name

user_has_type表: - USER_ID(FK)外鍵 - TYPE_ID(PK)

type_title ID(PK) TITLE_NAME

title_has_type 的title_id(PK) TYPE_ID(FK)外鍵

title_has_user title_id(PK) user_id(FK)外鍵

+0

謝謝@Abu Jafar Md。Salah。請你提供一個選擇查詢來顯示用戶名和船員職稱的例子,以便我能夠很好地理解它。 – bberry

+0

請檢查:SELECT user.UserName,type_title.TitleName FROM user LEFT JOIN type_title ON user.user_id = .type_title.title_id –

相關問題