Дизайн базы данных: приложение для сайтов знакомств? - PullRequest
1 голос
/ 26 июня 2011

Предположим веб-приложение, похожее на сайт знакомств, в котором каждый профиль может иметь одного или нескольких пользователей. Каждый пользователь, скажем, имеет следующие столбцы: имя, возраст, пол.

Я думаю, что дизайн БД будет выглядеть примерно так:

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   |
------------------------------------------------

Хороший ли дизайн БД? Как мне запросить следующее:

  • Найти все профили, где пол пользователя = Мужской
  • Найти все профили, где пол мужчины и женщины
  • Найти все профили, где пол пользователя - мужской и женский, возраст каждого пользователя> 20 и <40 </li>.
  • Найти все профили, где есть более 2 связанных пользователей

Если дизайн БД не может поддерживать такие запросы, какой дизайн будет?

1 Ответ

1 голос
/ 26 июня 2011

Я дал атрибуту пола тип бита.

Первый будет;

-- 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
...