i'd create two tables.
personnel:
id, first_name, last_name, department, pager_number, phone, email
schedule:
id, personnel_id, start_time, end_time
or rather than a simple date range, store items like day of week, month, week, time
slap a username/password column & session id column on the personnel table and you could allow users to update only their own info. add an admin column to detect if the users is an admin or not. i'd also add a priority column so that if users can't call the current on-call number they might call an alternate number (ie: the manager).
anytime the users try to save their own data use UPDATE to save and INSERT to add.
ie:
UPDATE personnel SET first_name = '$first_name', etc.. WHERE id = '$id' for all of the columns.
just make sure before it saves to check to see if they're admin or if their session id/password only matches the column they want to update.
ie:
UPDATE personnel SET first_name = '$first_name', etc for most of the columns.. , WHERE session_id = '$session_id'
don't worry about the user only wanting to make one change in a row, since you're not working with large amounts of data like with BLOBS & TEXT types, update the entire row except for privileged columns.
updating the personnel table will be the easy part. user logs on with username/password. gets a hashed unique result stored in a browser session cookie. when the user loads a page check the personnel table for the session cookie. if its found return the id number & admin boolean otherwise the session id is old and send them to the logon page.
if the user tries to add/save something use the logon code to make sure they're logged on and to see if they're admin. if they're admin allow them to save other users data.
the interesting part is implementing the schedule. the viewing should be simple. run a SELECT with WHEREs looking for the current time > start_time and time < end_time. filter on the dept and you're looking at the current on-call. order by priority so users call out the tech first, then alternate, then manager.
adding to the schedule will be the fun part. i'd use a basic calendar view. allow users to click on a date then be able to view other oncall numbers or select a range and add their own. add some filtering options at the top to only see their dept etc. besides the calendar view, take a look at adding a wizard to select patterns & ranges of dates.
ie: select monday through friday, 8am - 5pm for the month of april
this way users can add one entry to cover most of what they need. sure beats adding indivial entries into a calendar for every day. and makes it easy to remove the user form the calendar. a user could add one entry for day time, and another for night time at a lower priority (ie call me last, try everyone else first).
you might want to put dept, phone, pager, email addresses in their own tables because one user might have multiple phone numbers & pagers depending on the time of day, and may also be responsible for multiple depts.