我需要MYSQL查询解决方案

时间:2015-06-21 00:48:14

标签: mysql

我有这些表,并在一个查询中使用用户名和密码(登录时)我想从右表中选择数据。 示例:在用户表中有字段权限。 admin具有权限1,供应商具有权限2,而客户具有权限3。 谢谢。

+------------+--+----------+--+-----------+--+-------------+
|    user    |  |  admin   |  |  vendor   |  |  customer   |
+------------+--+----------+--+-----------+--+-------------+
| id_user    |  | id_admin |  | id_vendor |  | id_customer |
| username   |  | id_user  |  | id_user   |  | id_user     |
| password   |  | name     |  | name      |  | name        |
| permission |  | surname  |  | surname   |  | surname     |
+------------+--+----------+--+-----------+--+-------------+

1 个答案:

答案 0 :(得分:1)

为了跟进我的评论,没有理由(除了大量的重构时间承诺)这些4个表无法被规范化为一个表,其中包含以下所有相同的信息:

+------------+
|    user    |
+------------+
| id_user    |
| username   |
| password   |
| permission |
| name       |
| surname    |
+------------+

此处permission表示用户的类型(管理员,供应商或客户)。如果用户可能属于多个类别(例如,用户既是客户又是供应商),那么您可以将permission视为(bit) flag field(或者您可以将其分解为3个单独的布尔字段is_X)。这样做有许多下游好处可能不会立即显现出来。例如,您现在有一个id_user外键到任何其他相关表中,而不是可能有4个不同的外键。

始终尝试记住经过时间考验的关系数据库设计规则: “规范化直到它受到伤害,然后去规范化直到它起作用” 。去规范化的动机几乎总是昂贵的查询,需要不断的JOIN或不必要的键分叉。