2012-05-01 3 views
2

Я разрабатываю базу данных SQL, которая имеет 2 таблицы, для которых требуется «manager_id». Таблица «Сотрудники» и таблица «Услуги». Поскольку менеджеры считаются сотрудниками, я не уверен, должен ли я иметь отдельную таблицу «Менеджеров» или просто интегрировать ее в таблицу «сотрудники». Я новичок в SQL и не уверен в таких случаях. Это код, который я до сих пор:Должен ли я иметь отдельные таблицы или интегрировать данные?

CREATE TABLE Employees (
emp_id NUMBER(5) NOT NULL, 
emp_name VARCHAR2(20) NOT NULL, 
emp_add1 VARCHAR2(30) NOT NULL, 
emp_add2 VARCHAR2(30) NOT NULL, 
emp_add3 VARCHAR2(30), 
emp_town VARCHAR2(30), 
emp_county NUMBER(2) NOT NULL, 
emp_telno NUMBER(10), 
emp_position NUMBER(3) NOT NULL, 
emp_manager NUMBER(4), 
CONSTRAINT pk_empid PRIMARY KEY (emp_id), 
CONSTRAINT fk_empcounty FOREIGN KEY (emp_county) REFERENCES County(county_id), 
CONSTRAINT fk_empposition FOREIGN KEY (emp_position) REFERENCES Positions(position_id), 
CONSTRAINT fk_empmanager FOREIGN KEY (emp_manager) REFERENCES Manager(manager_id) 
); 

CREATE TABLE Facilities (
facility_id NUMBER(2) NOT NULL, 
facility_name VARCHAR(15) NOT NULL, 
facility_manager NUMBER(4) NOT NULL, 
CONSTRAINT pk_facilityid PRIMARY KEY (facility_id); 
CONSTRAINT fk_facilitymanager FOREIGN KEY (facility_manager) REFERENCES Manager(manager_id) 
); 
+0

в чем вопрос>? –

+0

Должен ли я иметь отдельную таблицу Менеджера или включать менеджеров в таблицу сотрудников – adohertyd

+0

Либо. Мое предпочтение состоит в том, чтобы иметь self-referential на 'manager_id' в' employee' обратно в 'emp_id', также в' employee', но если вам не нравится, что у него есть отдельная таблица. – Ben

ответ

4

Это вопрос о relational normalisation (организация данных в реляционной базе данных).

Так как организовать:

Ну хотя есть много шагов в нормализации отношений с целью получения наиболее эффективной структуры. В вашем случае вы должны сначала попытаться применить общие биты в одной таблице, а не общие биты должны быть в другом.

Так как ясень является сотрудником (скажем, с указанием названия сотрудника, имени, отдела), это должно быть в таблице сотрудников. Но скажем, что менеджеры имеют буфер обмена (например, цвет и размер атрибутов), которые нет у менеджеров. В этом случае вы должны добавить таблицу Manager для их обработки.

-- employeee table 
id Name  Title  Dept 
1 adohertyd Coder  IT 
2 Preet  Ninja  SillyWalks 
3 Skeety Secretary Cleaning 

-- manager table 
manager_id employee_id clipboard_size clipboard_colour 
1   2   Big    Black 

вы найдете менеджер, как этот

select Name, Dept, clipboard_size 
from employee e 
inner join manager m on e.id = m.employee_id 

Как вы идете дальше, вы можете найти его более эффективным, чтобы принести некоторые из этих атрибутов в таблицу служащих и есть столбец «Is_manager» , Это, по существу, денормализация и что-то, чего вы должны избегать, пока вам это не понадобится.

+0

В моем случае у меня должна быть таблица менеджеров, потому что у каждого «Фонда» есть менеджер? Это верно? – adohertyd

+0

Если это единственный атрибут только «manager only», тогда любой способ в порядке. Однако, если вы просматриваете другие атрибуты только «manager only», я теперь использую отдельную таблицу. –

+0

Большое спасибо – adohertyd

Смежные вопросы