There's a joke I heard some time back.
If you ask a C programer to count to 10, you get '0, 1, 2, 3, 4, 5, 6, 7, 8, 9'.
If you ask a DBA to count to 10, you get '0, 1, many'.
The key to the understanding of this joke is that if you ever are dealing with more than one thing in a database, you really need to have it be a many... not a 2 or a 3. There are many many's described in this database that should be treated as such.
+-----------+ +-----------+ +------------+
| restaurant| | rest_time | | meal |
|-----------| |-----------| |------------|
+-->| id |<--+ rid | +-->| id |
| | name | | | day (enum)| | | name |
| +-----------+ | | mealid +-+ +------------+
| | | open (b) |
| +-----------+ | +-----------+
| | phone | |
| |-----------| | +------------+ +------------+
| | phnum | | | rest_serv | | service |
+---+ rid | | |------------| |------------|
| type | +-+ rid | +--> id |
+-----------+ | sid +-+ | name |
| has | | |
+------------+ +------------+
You have a restaurant which has some attributes. Things that the restaurant can only have one of are columns in that table. It can only have one name, and one id. Depending on the description, it may have only one address (though if you have a chain like McDonalds). Other things it has only one of are things like capacities.
A restaurant may have multiple phones (fax your order in vs reservations?) And phones only belong to one restaurant. This is a one to many relationship.
The restaurant also has some services - but all restaurants also may have those same services. You want to be able to do a query of 'what restaurants has air conditioning?'
Likewise, a restaurant also has some meals that it serves on some days. I've got a simplified approach that works with mysql there for days, but having days be a separate table wouldn't be inappropriate and would be entirely appropriate if you have things like holidays being called out specially (new years eve: lunch, no dinner).