#mysql #performance #user-tracking
#mysql #Производительность #отслеживание пользователей
Вопрос:
Причина
Я создаю систему для еженедельного отслеживания помощи / пунктуальности в музыкальной группе. Нас около 40 человек, и я хотел бы знать, как мне это организовать. Мне нужно сохранить 2 вещи, час прибытия и причину. У меня также есть в базе данных все участники, которые были частью группы, и я отмечаю, активны ли они в данный момент. Я не хочу удалять данные ни от одного участника, но новые участники могут попасть в группу.
Опции
- Создайте таблицу для каждого пользователя и запись для каждого дня, указав, во сколько он прибыл и причину:
- 3 столбца
- 1 строка в неделю
- 40 таблиц (или более)
- Создайте таблицу для объяснения причин и таблицу для поступления:
- 1 начальный 1 столбец в неделю
- 40 строк в таблице (или более)
- 2 таблицы
- Создайте таблицу на каждый день:
- 3 столбца в таблице
- 40 строк / таблица (или более)
- 1 таблица в неделю
Итак … что более эффективно?
Ответ №1:
Попробуйте что-то вроде этого:
Таблица участников группы:
Идентификатор элемента группы (целое число), имя (varchar), фамилия (varchar), DateInserted (дата / время), Active (логическое значение / бит)
Таблица посещаемости:
AttendanceId (целое число), BandMemberId (целое число), Прибытие (дата / время), ReasonId (целое число)
ОБНОВЛЕНО ТАБЛИЦЕЙ ПРИЧИН:
Таблица причин:
ReasonId (целое число), Reason (varchar)
Таким образом, вы можете присоединить таблицу посещаемости к таблице BandMember на BandMemberId.
ОБНОВЛЕНО 5/25 НОВЫЕ ТРЕБОВАНИЯ:
Поскольку вам нужно хранить информацию о каждой репетиции / собрании, я бы сделал это следующим образом:
Таблица участника группы:
Идентификатор элемента группы (целое число), имя (varchar), фамилия (varchar), DateInserted (дата / время), Active (логическое значение / бит)
Таблица событий:
EventID (int), eventName (varchar), EventDate (datetime), EventTypeId (int)
Таблица EventType:
EventTypeId (int), EventDescription(varchar)
Таблица BandMemberEvent:
BandMemberEventId (int), BandMemberId (int), EventTypeId (int), TimeArrived (дата / время), ReasonId (int), EventID (int)
Таблица причин:
ReasonId (int), Reason(varchar)
Комментарии:
1. Неплохо. Вы можете добавить, что можно изменить
reason
наreasonId
и создать отдельнуюReason
таблицу, поскольку возможные причины посещения, вероятно, повторяются, например('write a song', 'test new quitar', 'jam', 'hang out', etc)
2. @dolphy Я просто спрашивал о посещаемости, у меня есть другая таблица со всеми данными (вот почему все столбцы по умолчанию равны 1) 1: 1.
3. Что я хочу знать, так это что более эффективно в mysql, иметь таблицу с большим количеством строк, таблицу с большим количеством столбцов или много таблиц
4. @txomon Вы подходите к этому неправильно. Вы не должны добавлять столбцы как обычный процесс вашего приложения, просто добавляя новые строки. Вот как это должно работать.
5. @txomon, ДжонД прав. Вы хотите, чтобы каждая таблица представляла некоторую сущность. Итак, в вашем случае у вас есть 3: участник группы, посещаемость и причина посещения. Каждая из них получает уникальный идентификатор. в таблице посещаемости вы получаете идентификатор для распознавания каждого участника группы и идентификатор для обозначения причины. Я бы посоветовал вам взглянуть на учебное пособие по SQL в Интернете или, возможно, прочитать книгу О’Рейли «Изучение SQL»