在SQL中創建數據庫和表

創建數據庫

你準備好開始用結構化查詢語言創建數據庫和表嗎? 在本文中,我們將探索使用CREATE DATABASE和CREATE TABLE命令手動創建表過程 。 如果您不熟悉SQL,您可能希望先查看我們的SQL基礎知識文章。

業務需求

在我們坐下鍵盤之前,我們需要確保我們對客戶的要求有一個很好的理解。 獲得這種見解的最佳方式是什麼? 當然,與客戶交談! 在與XYZ的人力資源總監坐下後,我們了解到他們是一個小部件銷售公司,主要負責跟踪銷售人員的信息。

XYZ公司將其銷售力量分為東部和西部地區,其中每個地區被劃分為許多由個體銷售代表覆蓋的地區。 人力資源部門希望跟踪每個員工所覆蓋的領域以及每個員工的薪資信息和監督結構。 為了滿足這些要求,我們設計了一個由三個表組成的數據庫,如本頁上的實體關係圖所示

選擇數據庫平台

我們決定使用基於結構化查詢語言(SQL)構建的數據庫管理系統 (或DBMS)。 因此,我們所有的數據庫和表創建命令都應該使用標準的ANSI SQL來編寫。

作為一個額外的好處,使用符合ANSI的SQL將確保這些命令可以在任何支持SQL標準的 DBMS(包括Oracle和Microsoft SQL Server)上運行。 如果您尚未為數據庫選擇平台,那麼文章數據庫軟件選項將引導您完成選擇過程。

創建數據庫

我們的第一步是創建數據庫本身。 許多數據庫管理系統在這一步提供了一系列用於定制數據庫參數的選項,但我們的數據庫只允許簡單地創建數據庫。 與我們的所有命令一樣,您可能希望查閱DBMS的文檔以確定您的特定係統支持的任何高級參數是否滿足您的需求。 我們使用CREATE DATABASE命令來設置我們的數據庫:

創建數據庫人員

請特別注意上面示例中使用的大小寫。 SQL程序員通常使用所有大寫字母作為SQL關鍵字,例如“CREATE”和“DATABASE”,同時使用用戶定義名稱(如“personnel”數據庫名稱)的全部小寫字母。 這些約定提供了易讀性。

在我們為數據庫創建表格時繼續閱讀本教程。

學習更多

如果您想了解更多關於結構化查詢語言的內容 ,請閱讀SQL入門或註冊我們的免費學習SQL電子郵件課程。

現在我們已經設計並創建了我們的數據庫,現在我們準備開始創建用於存儲XYZ公司人事數據的三張表。 我們將實現我們在本教程前面部分中設計的表格。

創建我們的第一個表

我們的第一張表格包含我們公司每位員工的個人數據。 我們需要包括每個員工的姓名,工資,ID和經理。 將最後名字和名字分隔成單獨的字段以簡化未來的數據搜索和排序是一種很好的設計實踐。 另外,我們會通過在每個員工記錄中插入對經理的員工ID的引用來跟踪每位員工的經理。 我們先看看所需的員工表。

ReportsTo屬性存儲每個員工的經理ID。 從顯示的樣本記錄中,我們可以確定Sue Scampi是Tom Kendall和John Smith的經理。 但是,Sue經理的數據庫中沒有任何信息,如其行中的NULL條目所示

現在我們可以使用SQL在人員數據庫中創建表。 在我們這樣做之前,讓我們通過發出USE命令來確保我們在正確的數據庫中:

使用人員;

或者,“數據庫人員” 命令將執行相同的功能。 現在我們可以看看用於創建員工表的SQL命令:

CREATE TABLE employees(employeeid INTEGER NOT NULL,lastname VARCHAR(25)NOT NULL,firstname VARCHAR(25)NOT NULL,reportsto INTEGER NULL);

與上面的例子一樣,請注意,編程約定規定我們將所有大寫字母用於SQL關鍵字,小寫字母用於用戶命名的列和表。 上面的命令起初可能看起來很混亂,但實際上它背後有一個簡單的結構。 下面是一個可以清理一些事情的概括性視圖:

CREATE TABLE table_name(attribute_name數據類型選項,...,attribute_name數據類型選項);

屬性和數據類型

在前面的示例中,表名是員工,我們包含四個屬性:employeeid,lastname,firstname和reportsto。 數據類型表示我們希望在每個字段中存儲的信息的類型。 員工ID是一個簡單的整數,因此我們將為employeeid字段和reportsto字段使用INTEGER數據類型。 員工姓名將是可變長度的字符串,我們不希望任何員工的姓名長於25個字符。 因此,我們將在這些字段中使用VARCHAR(25)類型。

NULL值

我們也可以在CREATE語句的options字段中指定NULL或NOT NULL 。 這只是告訴數據庫在向數據庫添加行時是否允許該屬性使用NULL(或空)值。 在我們的示例中,人力資源部門要求為每個員工存儲員工ID和完整姓名。 然而,並不是每個員工都有一位經理 - 首席執行官向任何人報告! - 所以我們在該字段中允許NULL條目。 請注意,NULL是默認值,省略此選項將隱式地允許屬性的NULL值。

建立剩餘表格

現在我們來看看地區表。 從快速瀏覽這些數據看來,我們需要存儲一個整數和兩個可變長度的字符串。 和我們前面的例子一樣,我們不期望Region ID消耗超過25個字符。 但是,我們的一些地區名稱較長,因此我們會將該屬性的允許長度擴展為40個字符。 我們來看看相應的SQL:

CREATE TABLE territories(territoryid INTEGER NOT NULL,territory說明VARCHAR(40)NOT NULL,regionID VARCHAR(25)NOT NULL);

最後,我們將使用EmployeeTerritories表來存儲員工和地區之間的關係。 每個員工和地區的詳細信息都存儲在我們之前的兩個表格中。 因此,我們只需要在此表中存儲兩個整數標識號。 如果我們需要擴展這些信息,我們可以在我們的數據選擇命令中使用JOIN從多個表中獲取信息。 這種存儲數據的方法減少了我們數據庫中的冗餘,並確保了我們存儲驅動器上空間的最佳利用。 我們將在未來的教程中深入介紹JOIN命令。 以下是實現我們的最終表的SQL代碼:

CREATE TABLE employeeterritories(employeeid INTEGER NOT NULL,territoryid INTEGER NOT NULL);

機制SQL提供了在創建後改變數據庫的結構

如果您今天特別精明,您可能已經註意到我們在執行數據庫表時“意外”遺漏了一項設計要求。 XYZ公司的人力資源總監要求數據庫跟踪員工的薪資信息,而我們忽略了在我們創建的數據庫表中提供這些信息。

但是,一切都不會丟失。 我們可以使用ALTER TABLE命令將這個屬性添加到我們現有的數據庫中。 我們希望將工資存儲為整數值。 語法與CREATE TABLE命令非常相似,在這裡是:

ALTER TABLE employees僱員ADD salary INTEGER NULL;

請注意,我們指定了該屬性允許使用NULL值。 在大多數情況下,將列添加到現有表時沒有選項。 這是由於該表已經包含沒有該屬性條目的行。 因此,DBMS自動插入一個NULL值來填補空缺。

這就包含了我們對SQL數據庫和表創建過程的看法。 經常檢查我們的SQL教程系列中的新分期付款 。 如果您想在新的文章添加到關於數據庫網站時收到電子郵件提醒,請務必訂閱我們的通訊!