数据库设计:约会网站式应用程序?

时间:2011-06-25 22:36:27

标签: mysql database database-design relational-database normalization

假设一个类似于约会网站的网络应用程序,其中每个配置文件可以有一个或多个用户。例如,每个用户都有以下列:姓名,年龄,性别。

我认为数据库设计类似于以下内容:

TABLE profile
=============================
| profile_id | name         |
=============================
| 1          | Dynamic Duo  |
-----------------------------

TABLE user
================================================
| user_id | profile_id | name   | age | gender |
================================================
| 1       | 1          | Batman | 35  | Male   |
------------------------------------------------
| 2       | 1          | Robin  | 25  | Male   |
------------------------------------------------

数据库设计是否良好?我如何查询以下内容:

  • 查找用户性别=男性
  • 的所有个人资料
  • 查找用户性别为男性和女性的所有个人资料
  • 查找用户性别为男性和女性且每个用户的年龄> 1的所有个人资料。 20和< 40
  • 查找有超过2个关联用户的所有配置文件

如果数据库设计不能支持这样的查询,那么设计会是什么?

1 个答案:

答案 0 :(得分:1)

我给了性别属性比特的类型。

第一个是;

-- All male
SELECT * FROM profiles p
  WHERE p.id NOT IN
    (SELECT u.profile_id FROM users u WHERE u.gender != 1);

第二

-- Male and female
SELECT * FROM profiles p
  WHERE p.id IN
    (SELECT u.profile_id FROM users u WHERE u.gender = 1)
    AND p.Id IN
    (SELECT u.profile_id FROM users u WHERE u.gender = 0)

第三种类似,只需将AND u.age > 20 AND u.age < 40添加到两个子查询中。

第四;

-- Number of associated users above 2
SELECT *, count(p.id) AS user_count FROM profiles p
  JOIN users u ON p.id = u.profile_id
  GROUP BY p.id HAVING count(u.id) > 2