2012-05-01 3 views
2

'manager_id'가 필요한 2 개의 테이블이있는 SQL 데이터베이스를 설계하고 있습니다. '종업원'테이블과 '시설'테이블. 관리자는 직원으로 간주되므로 별도의 '관리자'테이블을 보유해야하는지 아니면 직원 테이블에 통합해야하는지 확실하지 않습니다. 나는 SQL에 익숙하지 않고 이런 경우에 대해 확신하지 못한다. 이 질문에 대한 relational normalisation (관계형 데이터베이스에서 데이터의 조직)이다테이블을 별도로 만들거나 데이터를 통합해야합니까?

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

어느 쪽이든합니다. 필자가 선호하는 것은'employee'의'manager_id'에 대한 자체 참조를'emp_id'와'employee'에서 다시 볼 수있게하는 것입니다. 그러나 여러분이 마음에 들지 않는다면 별도의 테이블을 가지고 있습니다. – Ben

답변

4

: 이것은 내가 지금까지 가지고있는 코드입니다.

그래서 구성하는 방법 :

가장 효율적인 구조를 생산하는 목적으로 정상화 많은 단계가 잘하지만. 당신의 경우에는 먼저 공통 비트를 같은 테이블에 두는 접근법을 시도해야하며 비 공통 비트는 다른 테이블에 있어야합니다.

관리자는 직원이므로 (직원의 직위, 이름, 부서의 속성을 사용하여 말하십시오) 이는 직원 테이블에 있어야합니다. 그러나 관리자가 관리자가 아닌 클립 보드 (예 : 속성 색상 및 크기)를 관리자에게 부여 할 수 있습니다. 어떤 경우에는 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 

다음은 당신이 그것을보다 효율적으로 직원 테이블에 해당 속성의 일부를 가지고 찾을 수 있습니다 더 가서 'Is_manager'열을 가지고이

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

같은 관리자를 찾을 것 . 이것은 본질적으로 비정규 화 (denormalisation)이며, 필요할 때까지 피해야하는 것입니다.

+0

내 경우에는 각 '시설'에 관리자가있어서 관리자 테이블을 가져야합니다. 그 맞습니까? – adohertyd

+0

이것이 유일한 '관리자 전용'속성 인 경우 어느 쪽이든 괜찮습니다. 그러나 다른 '관리자 전용'속성을 보게되면 지금부터 별도의 테이블을 사용하게됩니다. –

+0

감사합니다. – adohertyd

관련 문제