Business hours structure

I have been googling for hours on this, what I am trying to do is
build a application with the following criterias

Employees
Company
Business Hours
Shifts

This will allow one user to create a business account with the ability
to add other employees to the account, the one user will first create
the businesses general business hours by selecting open and close
hours for Sunday - Saturday. Then once the first user adds other
employees to the business account, that user will be able to edit each
employees shifts. The one user will be able to manage each of the
employees entire day by 15 minute increments, this is going to be used
for a calendering system.

So lets say...

Company A hours are 9am-5pm Mon-Fri
Employee 1 hours are 11am-3pm Mon-Thurs
Employee 2 hours are 9am-5pm Tues-Fri
Employee 3 comes in at 9am but has to leave at 11am but comes back at
11:45am-5pm Mon-Fri

and each employee needs to be able to have there lunch break blacked
out whether that is a 15 min lunch or 60 min lunch

Now the question is how would I go about designing the database
(MongoDB) structure and models. I could build this out but I want to
use the best practice from the start of the project since this will
need to be scalable to hundreds of companies and thousands of
employees. Everything that I have read leads no where. My thinking on
this(I come from PHP background)

Companies
     company_id
     name
     address
     ....
     ....
Employees
     employee_id
     company_id
     name
     ....
     .......

Hours (Just for the business hours)
     hour_id
     business_id
     either do a hours field that holds a array OR something like the
following
          sun_open = 9:00:00
          sun_close = 17:00:00
          mon_open ...
          ......
          sat_close ...

Shifts
     shift_id
     shift_name
     employee_id
     day
     month
     year
     start_time
     end_time
     THEN HERE IS WHERE I AM STUCK - Going back to Employee 3's
requirements:

Employee 3 comes in at 9am but has to leave at 11am but comes back at
11:45am-5pm Mon-Fri

How can I store it in the database for the 11am to 11:45 off period as
well as a lunch break for each employee. I dont want to create
seperate columns for each of the 15 min increments for each day. And I
dont want millions of records in the database, also once the shifts
are set they need to be able to be changed still be 15 min increments.
Hopefully that is the best explanation for this problem any help would
be appreciated!!! Thanks for your time in advance, I really do
appreciate it!

You might consider using a bit field to represent open/close hours for the business and 'working' or 'not-working' for an employee. Since you're restricting it to 15 minute increments that's only 96 bits of data...

One upside to this is it makes it very quick to find overlaps or gaps as they are bit-wise operations in the db. One drawback is it's either 'on' or 'off'... which may make your lunchtime indicator problematic.

-p