Maximum normalization
No, you should not include a column make_id in the car_model table, it is implicitly defined by the series_id.  If you need to see the make details you could make a view that looks like your un-normalized table.

No this design cannot be normalised further.

To force the year ranges to be non-overlapping you could add a trigger (as MySql does not support check constraints) to ensure that start_year &gt;= max(end_year) and end_year &gt;= start_year.

The trigger would look something like this:

create trigger trg_car_model_date_range_unique before insert on car_model
for each row
begin
    if new.start_year &lt; (select max(end_year) from car_model) then
        signal sqlstate '45000' set message_text = 'Date range is not unique';
    end if;
    if new.end_year &lt; new.start_year then
        signal sqlstate '45000' set message_text = 'Date range is invalid';
    end if;
end