2010-06-22 39 views
1
CREATE TABLE DEPARTMENTS 
(Department_Id varchar(5) Primary Key NOT NULL, 
Department_Name char(20) NOT NULL, 
Manager_Id varchar(5) FOREIGN KEY REFRENCES EMPLOYEES, 
Location_Id FOREIGN KEY REFRENCES LOCATIONS) 
GO 

CREATE TABLE EMPLOYEES 
(Employee_Id varchar Primary Key NOT NULL, 
First_Name char(20) NOT NULL, 
Last_Name char(20) NOT NULL, 
Email varchar(60) NULL, 
PhoneNumber varchar(13) NULL, 
Hire_Date date NOT NULL, 
Manager_ID varchar(5) FOREIGN KEY REFRENCES EMPLOYEES 
Department_IdFK REFRENCES DEPARTMENTS) 
GO 

CREATE TABLE LOCATIONS 
(Location_ID varchar(5) Primary Key, 
Postal_Code no(5), 
City text(60), 
State_Province text(20), 
Country text(60)) 
+1

您有什麼問題? – 2010-06-22 23:22:16

+1

那些不是SQL Server或MySQL數據類型 – 2010-06-22 23:32:15

回答

4

我沒有約束,但在這裏你走了。

CREATE TABLE DEPARTMENTS (
Department_Id varchar(5) Primary Key, 
Department_Name char(20) NOT NULL, 
Manager_Id varchar(5), 
Location_Id varchar(5) 
) 
GO 

CREATE TABLE EMPLOYEES (
Employee_Id varchar(5) Primary Key, 
First_Name char(20) NOT NULL, 
Last_Name char(20) NOT NULL, 
Email varchar(60) NULL, 
PhoneNumber varchar(13) NULL, 
Hire_Date date NOT NULL, 
Manager_ID varchar(5), 
Department_Id varchar(5) 
) 
GO 

CREATE TABLE LOCATIONS (
Location_ID varchar(5) Primary Key, 
Postal_Code varchar(5), 
City varchar(60), 
State_Province varchar(20), 
Country varchar(60) 
) 
GO 

ALTER TABLE DEPARTMENTS WITH CHECK ADD CONSTRAINT [FK_DepartmentManager] FOREIGN KEY([Manager_Id]) 
REFERENCES EMPLOYEES ([Employee_Id]) 
GO 

ALTER TABLE DEPARTMENTS WITH CHECK ADD CONSTRAINT [FK_UserLocation] FOREIGN KEY([Location_Id]) 
REFERENCES LOCATIONS ([Location_Id]) 
GO 

ALTER TABLE EMPLOYEES WITH CHECK ADD CONSTRAINT [FK_EmployeeManager] FOREIGN KEY([Manager_Id]) 
REFERENCES EMPLOYEES ([Employee_Id]) 
GO 

ALTER TABLE EMPLOYEES WITH CHECK ADD CONSTRAINT [FK_EmployeeDepartment] FOREIGN KEY([Department_Id]) 
REFERENCES DEPARTMENTS ([Department_Id]) 
GO 
+0

+1:你打敗了我。除了錯別字和可疑的數據類型之外,主要的問題是「DEPARTMENTS」和「EMPLOYEES」表之間的外鍵引用。 – 2010-06-22 23:45:13

2

拼寫錯誤REFERENCESREFRENCES多次。嘗試正確拼寫,看看問題是否消失。

+0

他還缺少一些字段的字段類型規範... – Tahbaza 2010-06-22 23:40:40

+0

是的,我認爲還有更多的問題,但我認爲從錯別字開始。我只是簡單地看了一下。 – MJB 2010-06-23 00:01:10

0

你沒有提到這是爲了什麼數據庫,你在那裏有一些非常奇怪的數據類型....

雖然一些一般性的評論(它主要適用於SQL Server):

  • 在一般情況下,短字符串

    (在10個字符)可以並應當取得CHAR(x) - 所以你Department_Id真應了char(5)

  • CHAR(X)字段(至少在SQL Server)總是填充到其全長與空間 - 所以,如果你有Department_Id CHAR(5)並輸入'ABC',該列將包含'ABC..'

  • 因此

    ,如姓氏和名字列應該肯定是不是CHAR(20) - 如果你把'布魯斯'放入first_name,你最終會得到'布魯斯...............' - 祝你好運,試圖找到這樣的東西一列!改爲使用VARCHAR(20)

  • 如果您真的在使用SQL Server 2005或更高版本,則應停止使用TEXT - 該數據類型已被棄用。改爲使用VARCHAR(MAX) - 它具有TEXT的所有優點,並且您可以使用所有常用的字符串函數。

  • 我個人的建議,也就是使用INT喜歡的事情Location_Id - 通常,在INT加入和搜索是比快VARCHAR(5) - 加配INT,你永遠不用擔心拼錯了,具有錯誤的排序規則或大寫/小寫問題。如果你爲你的ID使用了一個非描述性的代理列,我認爲這是一件好事,我會把它作爲一個INT - 不要使用字符串作爲ID--它往往會變得雜亂無章(除了字符串是使用所有的地方 - 像狀態的縮寫等)

+0

「姓氏絕對不應該是CHAR(20)......祝你好運,試圖在這樣的專欄上找到任何東西!」 - 我不認爲這是你認爲的問題。 'ANSI padding'確保在比較不同長度的字符串時,無論如何都會用空格字符填充較短的字符。試試看:) – onedaywhen 2010-06-23 08:03:50

1
DEPARTMENTS REFERENCES EMPLOYEES 
EMPLOYEES REFERENCES EMPLOYEES 

這使得這些表難以奏效。看起來你是讓這些成爲NULL能夠知道,能夠在兩個表中創建兩個實體,你需要兩個INSERT s加上兩個UPDATE s。

此外,它似乎允許員工的經理不同於她的部門經理 - 這是打算嗎?

我會「設計出來的」爲NULL能夠引用/引用列的需要,並建立另外兩個關係表:

DepartmentalStaff REFERENCES Employees REFERENCES Departments 
DepartmentalManagers REFERENCES DepartmentalStaff 
+0

謝謝,我感謝你的幫助 – getbruce 2010-06-25 11:18:31

相關問題