I think the classic form of the problem is you have employees and employees have managers so the manager has a manager unless he's the CEO.
So how do you store the data? Solution 1: It would seem that the employee table can have manager_id or you can have an employee_manager table (that way you can have many or zero managers).
Some people say solution 1 is a bad idea because SQL doesn't support recursion and there is no query to find all managers above an employee. These people have alternative ideas (like the employee has a list of managers) however they all seem to involve a mess of unnormalized data that is extremely hard to maintain.
So what do you all think?
i agree with others.. recursion is available.
I would not place the manager_id in the emp table (despite the SCOTT/TIGER ancient wisdom). The real world breaks this business rule all the time, and it is not well normalized.
instead think of a person_to_person type link table, where two people are related to each other during a time period with a role... for example person1 is related to person2 from January through March as a manager. this allows you great flexibility in assigning people to projects, departments, arbitrary groups through time, even with the reality of having multiple managers at some points in time.
also consider that people to department relationships are similar - people may be related in subtle ways to multiple departments at the same time.