2012-07-19 28 views
0

我正在为具有多种用户类型(用户,管理员,超级用户)的系统设计数据库。我已经阅读了多种处理不同用户账户类型的方法,以及使我拥有一个带有公共字段的“用户”表的单个表,然后携带“userType”值指向正确的相应的表格获取更多信息。MySQL体系结构和多用户类型

对我而言,一件事就是如果我想要更多关于该用户的特定数据,我将不得不运行基于userType的第二个查询。似乎最初无法获得更具体的用户信息。

我将不得不根据userType(type = 1 - >转到用户表,type = 2->转到admin表)做一些案例逻辑,然后再次敲击db。我在这里忽略了什么吗?

谢谢!

+0

也许我错过了一些东西,但是您应该能够在管理表上执行左连接时查询用户表,对吧? – Wolph 2012-07-19 13:18:54

+0

我可以但重要的是,我不知道哪些表来看待更多的信息。假设我有任意数量的用户类型,我不知道要使用哪个表来获取更多角色特定的信息。 我能想到使它工作的唯一方法是,如果我有一个类型表,其中携带了typeId和tableName,并将其加入到查询中... – ackerchez 2012-07-19 13:21:43

+0

听起来像您需要绘制出您想要存储的信息为每种类型。然后你可以决定它的necc是否保存在不同的表格中。 – ethrbunny 2012-07-19 13:39:36

回答

0

如果您必须使用多个表,那么您可以在一个查询中查看它们,在您的select中使用UNION或将它们连接到初始表,然后使用if语句挑选要显示的列。

+0

所以你的建议是,他们总是(左)加入所有表格为每个可能的用户类型?这听起来像最简单的方法。 – octern 2012-07-19 14:14:40

+0

它凌乱,但它会工作。 – ethrbunny 2012-07-19 14:16:13

0

我个人认为,这个问题的最合理的解决做这样的:

SELECT * 
FROM user 
LEFT JOIN admin ON admin.user_id = user.user_id AND user.type = 'admin' 
LEFT JOIN superuser ON superuser.user_id = user.user_id AND user.type = 'superuser' 

你会得到NULL是在不管理员/超级用户和那些行用户。如果在所有情况下都不需要额外的字段,则应该从查询中忽略它们(尽管如Postgres一些数据库将自动执行此操作(如果不选择字段))。