Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
tarabukinivan
0 / 0 / 0
Регистрация: 12.08.2011
Сообщений: 81
1

Как реализовать структуру БД

13.01.2018, 10:18. Просмотров 758. Ответов 5
Метки нет (Все метки)

Доброе утро!
Есть сайт технической поддержки. И есть пользователи, которые оставляют на нем заявку в компанию. На нем есть таблица с полями: id_client(id пользователя AI, PK), name_client(Имя потльзователя), status(статус - наверное лучше сделать автоинкремент), date_r(дата регистрации).

Статусы у всех пользователей будут разные. Например:
у пользователя 1: открыто, отменено, закрыто, передано, принято.
у пользователя 2: открыто, отменено, закрыто, исполнено, в ожидании.

Статусы в любое время могут добавляться( не удаляются).
Я сделал так:
Вторая таблица такая: id_status, id_client, open, close, cancelled, sent, accepted.
id_status - AI PK, id_client - указывает на первую таблицу на пользователя, другие поля сами статусы и имеют значение enum: '0', '1' - в зависимости присутствует для пользователя ставиться 0 или 1.

Когда необходимо добавлять статус какому либо клиенту сначала ставлю 1 для нужного пользователя, а для всех других проставляю 0.

Может можно реализовать попроще?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2018, 10:18
Ответы с готовыми решениями:

Как организовать структуру пользователей?
Здравствуйте, как организовать структуру пользователей? Есть 3 вида...

Как организовать структуру приложения
Всем доброго времени суток. У меня есть MS Sql сервер. Там в БД есть таблицы:...

Посоветуйте как сделать структуру таблицы
Я не долго учу пхп и мускул, поэтому хочу спросить совета. Как лучше сделать...

Как лучше организовать такую структуру базы данных?
Добрый день, как лучше организовать такую структуру базы данных, есть имя...

Подскажите, как лучше создать структуру БД MySQL 5. На конкретном примере
Здравствуйте! Подсабите пожалуйста в создании БД. Задача: создать 2-е таблицы....

5
EU1CJ
26 / 26 / 17
Регистрация: 23.12.2017
Сообщений: 102
13.01.2018, 19:48 2
Как я понимаю, все пять статусов работают по принципу "ИЛИ". То есть, активным статусом может быть только один из них.
Так может проще сделать как-то так:
SQL
1
2
3
4
5
6
7
CREATE TABLE `statuses` (
`id_status` INT(10) NOT NULL AUTO_INCREMENT,
`id_client` INT (10) NOT NULL,
`status` ENUM('open', 'close', 'cancelled', 'sent', `accepted`) NOT NULL DEFAULT 'open', -- или что там по умолчанию
PRIMARY KEY (`id_status`),
UNIQUE KEY `status_client` (`id_status`, `id_client`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Ну, или какой engine у Вас используется.
На мой взгляд, с данными удобней работать будет.
0
tarabukinivan
0 / 0 / 0
Регистрация: 12.08.2011
Сообщений: 81
14.01.2018, 08:19  [ТС] 3
Дело в том, что у каждого клиента должны быть видны несколько статусов для выбора (только ему принадлежащие), а у другого клиента (другие статусы, принадлежащие именно ко второму клиенту)

Связь один ко многим
0
Sternman
56 / 57 / 28
Регистрация: 10.01.2018
Сообщений: 345
Завершенные тесты: 2
14.01.2018, 11:07 4
Лучший ответ Сообщение было отмечено tarabukinivan как решение

Решение

tarabukinivan,

tb_status
id(pk ai) | status_name | descrip |

tb_user_status
id(pk ai) | status_id/status_name(fk) | id_user(fk)

SQL
1
SELECT status_name FROM user_status WHERE id_user = "1"
Не вариант?
0
EU1CJ
26 / 26 / 17
Регистрация: 23.12.2017
Сообщений: 102
14.01.2018, 12:00 5
Лучший ответ Сообщение было отмечено tarabukinivan как решение

Решение

Цитата Сообщение от tarabukinivan Посмотреть сообщение
Дело в том, что у каждого клиента должны быть видны несколько статусов для выбора (только ему принадлежащие), а у другого клиента (другие статусы, принадлежащие именно ко второму клиенту)
Ну, так и в чём проблема? В базе записи:
SQL
1
2
3
4
5
6
7
8
-- для клиента №1:
1, 1, 'open'
2, 1, 'close'
3, 1, 'cancelled'
-- для клиента №2:
4, 2, 'open'
5, 2, 'accepted'
6, 2, 'sent'
И выводите их в dropdown list box на front-end.
Просто, наверное, смутило название поля 'status_id'... Переименовать можно.
Хотя, дело, конечно, личное. Это просто предложение.

Добавлено через 5 минут
Или связку добавить, как Sternman предлагает.
Пригодится для maintenance "statuses" table в перспективе.
Тогда записи в баже вот так выглядеть будут:
SQL
1
2
3
4
5
6
7
8
-- для клиента №1:
1, 1, 1
2, 1, 2
3, 1, 4
-- для клиента №2:
4, 2, 2
5, 2, 1
6, 2, 3
Так даже ещё гибче будет. Да и правильней, я думаю.
0
tarabukinivan
0 / 0 / 0
Регистрация: 12.08.2011
Сообщений: 81
14.01.2018, 16:19  [ТС] 6
Ну да, что-то типа такого должно быть.
0
14.01.2018, 16:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2018, 16:19

Как хранить стили в бд или как вообще это реализовать
Имеется: Скрипт вывода таблицы с нужными полями из базы мускула. Он просто...

как реализовать поиск наподобие как в гугле
Доброго времени суток. Встала задача реализовать поиск. Прошу помощи. Сайт на...

Как реализовать структуру на js?
struct klass { char name; char klass_name; float bal; }; как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru