Codeigniter: как мне реструктурировать схему БД? - PullRequest
0 голосов
/ 13 мая 2010

Я даже не знаю, правильный ли это термин.

Можно ли знать, что я крупный новичок!

У меня есть три таблицы: пользователи, профили и опрос. Каждое поле имеет user_id в качестве первого поля (автоинкремент для пользователей), и все они связаны ограничением внешнего ключа, CASCADE on DELETE.

В настоящее время для каждого пользователя, скажем, user_id 1, у них есть соответствующая запись в других таблицах. Для профилей в нем перечислены все их данные, а в таблице опроса содержится вся информация об их опросах.

Теперь я должен что-то изменить ... штопать охват ползучести . Пользователи должны иметь возможность иметь несколько результатов опроса. Я полагаю, что это будет похоже на таблицу комментариев для блога ...

Все мое приложение основано на идее, что один пользователь связан с ограничивающим профилем и опросом.

Как мне структурировать мою БД?

Как мне создать базу данных моего приложения, чтобы у пользователя было несколько тестов / профилей для теста?

Пожалуйста, помогите! Любые советы, информация и личные знания приветствуются!

Прямо сейчас единственный способ, которым я знаю, как сопровождать моего клиента, - это создать псевдопользователя для каждого теста (так ненужного) и перечислить его в таблицу представления (называемую «вашими тестами») - - они получаются из БД, говоря: где user_id = manager_id

1 Ответ

2 голосов
/ 13 мая 2010

В настоящее время опрос имеет внешний ключ для пользователя, который идентифицирует пользователя, принявшего участие в опросе. Это хорошо и не меняется.

Но добавьте автоинкрементный первичный ключ к опросу (и к профилю тоже). Теперь пользователь может иметь несколько опросов. Каждый отдельный опрос имеет свой ключ, и его получатель идентифицируется внешним ключом пользователя.

Чтобы найти все опросы для всех пользователей:

select a.*, b,* 
from user a 
join survey b on (b.user_id = a.user_id);

Чтобы найти все опросы для одного пользователя:

select a.*, b,* 
from user a 
join survey b on (b.user_id = a.user_id)
where a.user_id = some_user_id;

Чтобы просто получить данные опроса, просто выберите b.*. Например:

select b.* 
from survey b on 
where a.user_id = ( select user_id from user a where a.name = 'Bob' );

Опять же, все, что вам нужно сделать, это добавить первичный ключ (который должен быть автоинкрементом) к опросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...