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))
回答
我沒有約束,但在這裏你走了。
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
+1:你打敗了我。除了錯別字和可疑的數據類型之外,主要的問題是「DEPARTMENTS」和「EMPLOYEES」表之間的外鍵引用。 – 2010-06-22 23:45:13
你沒有提到這是爲了什麼數據庫,你在那裏有一些非常奇怪的數據類型....
雖然一些一般性的評論(它主要適用於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--它往往會變得雜亂無章(除了字符串是使用所有的地方 - 像狀態的縮寫等)
「姓氏絕對不應該是CHAR(20)......祝你好運,試圖在這樣的專欄上找到任何東西!」 - 我不認爲這是你認爲的問題。 'ANSI padding'確保在比較不同長度的字符串時,無論如何都會用空格字符填充較短的字符。試試看:) – onedaywhen 2010-06-23 08:03:50
DEPARTMENTS REFERENCES EMPLOYEES
EMPLOYEES REFERENCES EMPLOYEES
這使得這些表難以奏效。看起來你是讓這些成爲NULL
能夠知道,能夠在兩個表中創建兩個實體,你需要兩個INSERT
s加上兩個UPDATE
s。
此外,它似乎允許員工的經理不同於她的部門經理 - 這是打算嗎?
我會「設計出來的」爲NULL
能夠引用/引用列的需要,並建立另外兩個關係表:
DepartmentalStaff REFERENCES Employees REFERENCES Departments
DepartmentalManagers REFERENCES DepartmentalStaff
謝謝,我感謝你的幫助 – getbruce 2010-06-25 11:18:31
- 1. 在SQL Server 2008中創建測試表
- 2. sql 2008查詢。我正在嘗試更正此錯誤訊息
- 3. 我正在嘗試使用表格爲輸入創建表格
- 4. SQL Server 2008創建表,在SQL Server Management Studio中不可見
- 5. 在SQL Server Management Studio中創建表格
- 6. 在外部SQL Server中創建表格
- 7. 在SQL Server在每次創建表創建觸發器2008 R2
- 8. 在SQL Server 2008中創建計算列
- 9. SQL Server 2008中創建
- 10. 創建MS SQL Server 2008中
- 11. 試圖在Microsoft SQL Server 2008中恢復損壞的SQL表格
- 12. 嘗試從選擇創建一個表 - SQL Server 2008中拋出錯誤
- 13. 我嘗試在SQL
- 14. 使用我的sql創建此表格
- 15. 如何在SQL Server 2008上創建此條件分組字段?
- 16. 在SQL Server 2008中創建動態表名和表列?
- 17. 如何優化此查詢?我正在使用sql server 2008
- 18. 在與SQL Server 2000兼容的SQL Server 2008中創建腳本
- 19. 如何在VS 2008中創建表格?
- 20. 我正在嘗試將此數據插入到SQL中
- 21. 錯誤嘗試安裝SQL Server 2008
- 22. SQL Server 2008創建表語法錯誤
- 23. SQL Server 2008 - 創建一個聯接表
- 24. 創建小計 - SQL Server 2008
- 25. 格式SYSDATETIMEOFFSET在SQL Server 2008
- 26. 在sql server 2008 r2中,連接兩列而不創建表
- 27. 從VBScript在SQL Server 2008中創建臨時表
- 28. 如何在sql server 2008 R2數據庫中創建臨時表?
- 29. 如何在SQL Server 2008 express中創建數據庫圖表?
- 30. 在SQL Server 2008 R2中創建表變量
您有什麼問題? – 2010-06-22 23:22:16
那些不是SQL Server或MySQL數據類型 – 2010-06-22 23:32:15