0

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

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

我必须根据 userType 做一些案例逻辑(类型 = 1 -> 转到用户表,类型 = 2-> 转到管理表),然后再次点击数据库。我在这里忽略了什么吗?

谢谢!

4

2 回答 2

0

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

于 2012-07-19T14:00:04.387 回答
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 这样的一些数据库会自动执行此操作)。

于 2012-07-19T16:25:46.120 回答