Tabla HOTEL
idhotel (INT: unique, auto_increment, primary_key)
nombre (VARCHAR(150))
estrellas (INT)
morada (VARCHAR(150) Aunque no estoy seguro a que se refiere con morada
ciudad (VARCHAR(150))
Tabla RESTAURANTE
idrestaurante (INT: unique, auto_increment, primary_key)
idhotel (INT: foreign_key)
nombre (VARCHAR(150))
categoria (VARCHAR(150)) No sé si la categoría son por ejemplo "3 tenedores" u otra cosa, como no se especifica lo pongo varchar, si es en número de tenedores sería más conveniente usar un INT.
Relación HOTEL-SERVICIO
idhotel (INT: primary_key)
idservicio (INT: primary_key)
Tabla SERVICIO
idservicio (INT: unique, auto_increment, primary_key)
nombre (VARCHAR(255))
Relación RESTAURANTE-COMIDA
idrestaurante (INT: primary_key)
idcomida (INT: primary_key)
Tabla COMIDA
idcomida (INT: unique, auto_increment, primary_key)
tipo (ENUM('snack','desayuno','comida','cena'))
-----------
Relación HOTEL-HABITACION
idhotel (INT: primary_key)
idhabitacion (INT: primary_key)
Tabla HABITACION
idhabitacion (INT: unique, auto_increment, primary_key)
tipo (VARCHAR(100))
Relación HABITACION-SERVICIO
idhabitacion (INT: primary_key)
idserviciohabitacion (INT: primary_key)
Tabla SERVICIO_HABITACION
idserviciohabitacion (INT: unique, auto_increment, primary_key)
nombre (VARCHAR(255))
-------------
Relación HOTEL-HUESPED
idhotel (INT: primary_key)
idhuesped (INT: primary_key)
Tabla HUESPED
idhuesped (INT: unique, auto_increment, primary_key)
nombre (VARCHAR(200))
DNI (VARCHAR(10): unique)
telefono (VARCHAR(13)) 13 Caracteres para poder almacenar prefijos de distintos países. Se podría poner UNIQUE pero es posible que dos personas que vivan en la misma casa (por lo tanto con el mismo número fijo) hagan reservas individuales por lo que yo no usaría el atributo UNIQUE en el teléfono.
ciudad (VARCHAR(150))
Tabla RESERVA
idreserva (INT: unique, auto_increment, primary_key)
idhotel (INT: foreign_key)
Relación RESERVA-HABITACION
idreserva (INT: primary_key)
idhabitacion (INT: primary_key)
Relación RESERVA-HUESPED
idreserva (INT: primary_key)
idhabitacion (INT: primary_key)
idhuesped (INT: primary_key)
fecha_entrada (DATE)
fecha_salida (DATE)
regimen (ENUM('alojamiento','alojamiento_desayuno','media_pension','pension_completa'))
Es posible que me haya equivocado en algunas cosas, porque lo he hecho sobre la marcha aquí en el foro, ni lo he dibujado, ni lo he probado, pero creo que en general se adapta a los requerimientos del ejercicio, puede que falte algún detalle pero no creo que falte nada importante.
La entidad relación que yo haría sería así:
Está hecho con DBDesigner, te lo aconsejo, porque creas la entidad relación, añades los atributos correspondientes y luego exportas a SQL. Ese archivo SQL lo importas en tu gestor de bases de datos y ya tienes la tabla creada y diseñada.

En el modelo que he hecho en DBDesigner NO he puesto los atributos de cada tabla (sólo los claves principales y foráneas) para hacerla más sencilla de entender, pero obviamente cada tabla tendrá que tener los atributos que ya he especificado arriba en este post.
ERRORES que he visto en tu modelo entidad-relación- Relacionas los servicios disponibles del hotel con la tabla huésped, ¿por qué?, no necesitas esa relación.