2009-08-26 2 views
2

Я строю рабочую страницу.разделение данных на несколько таблиц

Часть информации идет в таблицу "сотрудников, но некоторые из них идет в таблице«доступности», на который ссылается на«сотрудника»таблицы:

доступность: идентификатор/EmployeeID (уникальный идентификатор из таблица сотрудников)/в понедельник/вкл./

Поэтому у меня нет этого уникального идентификатора из таблицы сотрудников, пока я их не создам.

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

Или это беспорядочно, и у меня должна быть страница сотрудника для создания, а THEN - страница доступности доступности?

Так что, в основном, я хочу знать, является ли это чище и «лучше» кодирование для разделения двух функций?

+0

Я знаю, что могу это сделать ... Я думаю, что мне интересно, если его ... «лучше» сделать это отдельно. – ian

ответ

3

Добавление @ ответ Quassnoi в:

Вы бы добавить запись сотрудника, а затем использовать функцию MySQL LAST_INSERT_ID() найти autoincremented уникальный идентификатор для employee записи, которую вы добавили. Затем вы можете вернуть это значение в оператор availabilityINSERT.

Более подробная информация на странице руководства MySQL на http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html

Это важно, что вы не используете ЗЕЬЕСТ (например SELECT MAX(employee.id)), так как там могут быть и другие виды использования добавляющие записи, а также. LAST_INSERT_ID() относится к вашей связи

+0

Полезно знать на LAST_INSERT_ID() – ian

1

Конечно, создайте employee сначала, availability.

Если ваши таблицы: InnoDB, вы можете сделать это в транзакции, чтобы вы могли отменить все обновление, если что-то пошло не так.

1

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

Да, это звучит нормально. Если вы используете столбец автоинкремента для employeeid, вы можете использовать mysql_insert_id() или эквивалент для безопасного восстановления последнего вставленного идентификатора. Не делайте SELECT MAX(employeeid) FROM ...., потому что вы можете столкнуться с проблемами, когда грузы людей используют его одновременно.

1

Вы можете легко получить последнюю insered запись через

mysql_insert_id() 

После этого, вы можете вставить запись доступности для нужного сотрудника. Примечание: Я бы выбрал структуру, которая позаботится об этих проблемах, таких как Symfony или Cake.

1

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

+0

Да, это то, что у меня есть .. стол служащих. один для «сдвигов», а затем доступность - это связь между ними. – ian

+0

@GoodTimeTribe: Не могли бы вы привести несколько примеров того, как использование последней созданной строки может усложнить ситуацию? Я всегда считал его очень надежным и понятным для коллег, но могут быть и другие обстоятельства, о которых я не знаю. – anschauung

Смежные вопросы