2012-05-01 72 views
2

我正在設計一個SQL數據庫,它有兩個需要'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

中包括經理?我的首選是將'employee'中的'manager_id'自我指涉回'emp_id',也是'employee',但如果您不喜歡它有單獨的表。 – Ben

回答

4

這是一個問題,關於relational normalisation(數據在關係數據庫中的組織)。

那麼如何組織:

雖然是有與目標正常化許多步驟來產生最有效的結構。在你的情況下,你應該首先嚐試將普通位放在同一個表中,而非普通位應該放在另一個表中。

因此,由於經理是一名員工(可以說屬性員工的頭銜,名稱,部門),這應該在員工表中。但可以說管理人員擁有非管理者不需要的剪貼板(例如屬性顏色和大小)。在這種情況下,您需要添加一個管理器表來處理這些表。

-- 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 

經理當你走的更遠,你會發現它更有效地把其中的一些屬性到employee表中,有一個「IS_MANAGER」列。這基本上是非規範化的,你應該避免,直到你需要它。

+0

在我的情況下,我應該有一個經理人表,因爲每個'設施'有一個經理?那是對的嗎? – adohertyd

+0

如果這是唯一的'唯一經理'屬性,那麼任何一種方式都可以。但是,如果您預先考慮其他「僅限經理人」屬性,那麼現在我會使用單獨的表格。 –

+0

非常感謝你 – adohertyd

相關問題