2017-10-28 91 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 –

相关问题