  Assigning jobs onto identical machines with the objective to minimize the
maximal load is one of the most basic problems in combinatorial optimization.
Motivated by product planing and data placement, we study a natural extension
called Class Constrainted Scheduling (CCS). In this problem, each job
additionally belongs to a class and each machine can only schedule jobs from at
most $c$ different classes. Even though this problem is closely related to the
Class Constraint Bin Packing, the Class Constraint Knapsack and the Cardinality
Constraint variants, CCS lacks results regarding approximation algorithms, even
though it is also well-known to be NP-hard. We fill this gap by analyzing the
problem considering three different ways to feasibly allot the jobs: The
splittable case, where we can split and allot the jobs arbitrarily; the
preemptive case, where jobs pieces belonging to the same job are not allowed to
be scheduled in parallel; and finally the non-preemptive case, where no
splitting is allowed at all. For each case we introduce the first PTAS where
neither $c$ nor the number of all classes have to be a constant. In order to
achieve this goal, we give new insights about the structure of optimal
solutions. This allows us to preprocess the instance appropriately and by
additionally grouping variables to set up a configuration Integer Linear
Program (ILP) with N-fold structure. This N-fold structure allows us to solve
the ILP efficiently. Further we developed the first simple approximation
algorithms with a constant approximation ratio running in strongly polynomial
time. The splittable and the preemptive case admit algorithms with ratio $2$
and a running time of $O(n^2 \log(n))$. The algorithm for the non-preemptive
case has a ratio of $7/3$ and a running time of $O(n^2 \log^2(n))$. All results
even hold if the number of machines cannot be bounded by a polynomial in $n$.
