Выбор дизайна базы данных - PullRequest
1 голос
/ 16 мая 2011

Я пытаюсь создать создателя рабочего графика с несколькими магазинами и в каждом магазине с несколькими сотрудниками. Каждый магазин может также получить доступ к прошлому созданному расписанию, но только текущее расписание может быть изменено. Моя база данных SQL настроена так, что у меня есть две таблицы: магазины и сотрудники. У каждого сотрудника есть магазин, в котором он работает, и время для всех дней недели, поэтому я сохранил сотрудников из всех магазинов в одной таблице и получил их по мере необходимости с помощью запросов.

У меня вопрос: должен ли я добавить еще один столбец (неделю) в таблицу сотрудников, чтобы указать, для какой недели это расписание, или создать новый HTML-файл для каждого расписания для прошлых расписаний этого магазина? Мне нравится второй вариант, потому что он снижает вероятность повреждения моей базы данных SQL. Поскольку прошлые графики не поддаются изменению, у меня нет проблем с этим.

P.S. просто чтобы убедиться: если я пишу в файл, используя php, скажем $name = "monir"; write("My name is $name"). Файл скажет "My name is $name" или "My name is monir"?

Ответы [ 5 ]

4 голосов
/ 16 мая 2011

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

1 голос
/ 16 мая 2011

Как показывают комментарии, сделанные DA и другими решениями, наличие третьей таблицы - это путь. Как минимум, попробуйте следующее:

магазин: id | имя | адрес | и т.д.

работник: id | имя_файла | фамилия | и т.д.

График работы: id | store_id | employee_id | неделя | дата | время начала | end_time

Хотя неделя избыточна, поскольку дата хранится, она позволяет выполнять запросы намного быстрее. Вам не нужен архив / последний бит, потому что вы можете просто запросить, является ли schedule.week текущей неделей или нет.

1 голос
/ 16 мая 2011

У вас должны быть магазин, сотрудник и таблица, объединяющая магазины и сотрудников, поскольку магазины и сотрудники НЕ имеют отношения один-к-одному.У всех, кого я когда-либо знал, кто работал в розничной торговле, были случаи, когда их просили работать в других магазинах.

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

1 голос
/ 16 мая 2011

Мои вопросы: я должен добавить еще один столбец (неделю) к таблице сотрудников

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

Мне нравится второй вариант, потому что он снижает вероятность повреждения моей базы данных SQL.не хочу избегать динамического решения (таблицы) в пользу статического (html-страницы) просто для того, чтобы пользователи не могли обновлять информацию.Вам просто нужно создать правила доступа в вашем приложении.

0 голосов
/ 16 мая 2011

Я на самом деле только что сделал что-то очень похожее, но наша система намного сложнее, чем эта.

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

Я бы предложил иначеВы добавляете еще одну дополнительную таблицу для «недель».Дайте ему идентификатор, дату начала и дату окончания, затем используйте этот «week_id» в другом месте для сохранения дублирования.Вы также можете отделить записи в расписании от записей о сотрудниках, чтобы у каждого сотрудника был уникальный идентификатор, а ваша таблица «график» была бы: ID, идентификатор_ сотрудника, идентификатор недели, дата, время начала, время окончания.

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

Для вашего PS - если вы заключите выходные данные в двойные кавычки, PHP будет интерполировать вашиценности.Таким образом, вы получите «Меня зовут Монир», а не «Меня зовут $ name».

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