[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Разработка структуры БД
Страницы: 1, 2, 3
Darden80
Стоит такая задача:
На сайте нужно реализовать создание отчетов сотрудников по командировкам. Сотрудник получает список Задач, Объектов и т.д. (с различными вариантами их фильтрации по датам, местам…). Планирую это оформить таблицей Mysql (у каждого сотрудника своя таблица Дата/Место/Объект/Задача/Объект/Задача/Объект/Задача… у каждого Места может быть много задач и объектов, мест тоже много ).
А вот дальше я в раздумьях. Нужно отобразить Отчет в виде таблицы:
Дата Дата
Время / Текст отчета Время / Текст отчета и т.д.

Время – необязательный параметр
В столбец «Текст отчета» копируется текст Задач, Обектов и т.д. плюс комментарии сотрудника. Затем данная таблица отправляется руководителю.
Изначально собирался информацию из Отчета сохранять в той же таблице, где и Задания (в виде Дата/Время/Текст отчета/Время/Текст отчета/Время/Текст отчета,,,).
Но теперь я не понимаю:
1. как написать код, что бы новая строка в отчете сохранялась в следующем пустом столбце БД?
2. как организовать сохранение данной информации? ( Если сделать кнопку «Сохранить» и перезаписывать заново все ячейки, то думаю это не правильно и лишняя нагрузка)
3. правильно ли вообще так (отдельные столбцы под Отчеты и Задачи) организовывать хранение инф-ии или как то проще можно?

Игорь_Vasinsky
Цитата
у каждого сотрудника своя таблица

не надо так делать laugh.gif
почитайте про нормальные формы БД, про нормализацию.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Darden80
Даже если сотрудников будут тысячи?
freeze
Всё равно тебе тут нужна нормализация. Хоть тысячи, хоть миллионы...
andrey888
Цитата
Даже если сотрудников будут тысячи?

Тем Более!

У каждого сотрудника свой уникальный номер - по номеру выводим всю инфу о нем ....

Не ну конечно можно попробовать под каждого свою таблицу - только отпишитесь при каком кол-ве таблиц БД начнет еле передвигаться .. Интересный эксперимент, кстати)

_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
Darden80
Т.е. будет гораздо лучше (правильней) создать одну гипер базу - то же самое что и в моем варианте только добавить ID пользователя, и соответсвенно инфу по всем пользователям???
1000 чел * 500 задач и отчетов = 500 000 строк так лучше? А еще через год???

А как "нормализовать" задачи и отчеты??? Это в основном уникальная информация??? Именно в этом у меня и основная загвоздка!
inpost
Darden80
У меня таблица сейчас на 15млн. записей, по прогнозам 20-25млн. без горизонтального расширения будет выдерживать.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Darden80
15 млн это очень хорошо!
Но вопрос то остается:
А как "нормализовать" задачи и отчеты??? Это в основном уникальная информация???

Или это не важно - главное не делать таблицу под каждого пользователя?
Darden80
Цитата (inpost @ 13.05.2013 - 00:36)
Darden80
У меня таблица сейчас на 15млн. записей, по прогнозам 20-25млн. без горизонтального расширения будет выдерживать.

А сколько у вас запросов к таблице?
inpost
Darden80
не отвечу так.
Таблицы:
Пользователи
Объекты
Задачи
Отчеты
_______________
Пользователи к задачам связать через дополнительную таблицу, многие ко многим.
Задачи к объектам связать - один ко многим.
_______________
Отчёты сами по себе.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
sergeiss
Дамы и господа, товарищи и товарки wink.gif Вот вы ржёте над "тысячей таблиц". А ведь это вполне реально...
Партиции, дамы и господа! smile.gif Никто не мешает настроить партиции так, чтобы для каждого сотрудника была своя "личная" партиция. А что такое партиция? Это и есть, по сути дела, некое логическое объединение таблиц с одинаковой структурой, плюс еще ряд плюсов (сорри за тафтологию).
Правда, я не буду утверждать, что тысячи партиций будут работать быстро. Тут суть в другом: "каждому юзеру по таблице" - это реально!

PS. Автору темы, возможно, не стОит этим заморачиваться, судя по уровню его нынешних познаний. Но помнить стоит, и почитать надо обязательно на эту тему. И лучше всего, если серьёзно говорить, все-таки делать партиции. Но - с дроблением по месяцам, а не по юзерам.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Darden80
Я и так уже запутался smile.gif
а нужно еще видимо создать таблицы Дата Место Время - это все данные заполняемые вручную.
Сотрудник получает задания: много Мест, у каждого Места много Объектов, у каждого Объекта много Задач. Местам и Объектам можно присвоить ID - они конечны, а вот Задачи это просто текст он уникален каждый раз.
Может в данном случае лучше прибегнуть к денормализации? чем плодить таблицы?

А таблицу Отчеты оставить в том же виде: Дата/Время/Текст отчета/Время/Текст отчета/Время/Текст отчета... ?
Darden80
Цитата (sergeiss @ 13.05.2013 - 01:15)

PS. Автору темы, возможно, не стОит этим заморачиваться, судя по уровню его нынешних познаний. Но помнить стоит, и почитать надо обязательно на эту тему. И лучше всего, если серьёзно говорить, все-таки делать партиции. Но - с дроблением по месяцам, а не по юзерам.

Заморачиваться в любом случае стоит! Без этого нет развития.
r3al
разбей все на составляющие.. отдели то что общее у всех например (грубо говоря)

пользователи имеют (id, username)

задачи имеют (id, user_id, task_info)

места (id, task_id, place_info)

объекты (id, place_id, object_info)

ну и получается что ты "привязываешь" объект к месту, место к задаче, задачу к пользователю ну или как там у тебя. вот и получится что ты структурируешь все по отдельным таблицам а потом по ним будешь выборку делать как тебе угодно, главное что бы что то к чему то привязывалось.. и не важно потом сколько чего будет, ты всегда извлечешь нужный объект и задачи по нему для конкретного пользователя.
andrey888
Все правильно как и написали выше, я бы сделал таблицу пользователей. Вторую таблицу для заданий (привязка к конкретному пользователю по Id ) , таблицу объектов - то же самое с привязкой . Потом можешь из 2 - 3 разных таблиц все что нужно для каждого конкретного юзера вытаскивать по привязкам.

_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.