我在mysql中为一个拥有四个不同用户的站点设计数据库如下。
1.Admin
2.Businesses
3.Investors
4.Personal
我为每种类型的用户创建了四个不同的表,因为它们具有不同的列。我还创建了一个名为用户角色的表,如。
User_roles => rol_id& rol_name
我已将rol 1作为admin,2作为business等等。现在我需要创建一个commen user_login表,其中包含用户名&传递所有上述类型用户的字。我对如何在所有这四个表和user_login表之间建立关系感到困惑?
答案 0 :(得分:1)
<强>模型强>
您只需要3张桌子。
列user_id是指向用户表的列ID的foreign key。 列role_id是指向角色表的列id的外键。
此模型的优点是,如果要创建新角色,只需在角色表中添加一行,而无需修改模型。
<强>实施例强>
用户表:
id username password
1 sangam password
2 Muur password
角色表:
id role_name
1 Admin
2 Business
3 Investor
4 Personal
检索管理员列表:
SELECT u.*
FROM user u, user_role ur, role r
WHERE u.id = ur.user_id AND ur.role_id = r.id
AND r.role_name = 'Admin';
添加新角色:
INSERT INTO TABLE role(role_name) VALUES('New Role Name');
将业务角色添加到用户sangam:
INSERT INTO user_role(1, 2);
或者:
INSERT INTO users.role_user(user_id, role_id) VALUE(
(SELECT id FROM user WHERE username = 'sangam'),
(SELECT id FROM role WHERE role_name = 'Business')
);
答案 1 :(得分:0)
您最有可能使用foreign keys,并创建一个包含用户ID和角色ID的表,然后可以使用该表查找关联表中的角色+用户数据。
答案 2 :(得分:0)
USERID | USER_ROLES_ID
USERID | USERNAME | PASSWORD
USER_ROLES_ID | ROLE_NAME
找出用户名的用户角色
SELECT ul.username,ud.role_name FROM USER_LOGIN ul,USER_ROLES ur,USER_ROLE_DEFINED ud&gt; WHERE ul.username =&#34; adam&#34; AND ul.userid = ur.userid AND ur.user_roles_id =&gt; ud.user_roles_id;
逻辑在那里,是否有效......你必须自己测试它。
正如其他人评论的那样,这是一个三表版本。是的,两张桌子也有其优势。