ASP.NET Webform 簡易活動報名系統(2) 開資料庫+建立報名資料表| SQL Server 2022

by | 3 月 4, 2025 | 程式 | 0 comments

Views: 5

現代的程式設計,除了上傳的檔案、文件、圖片等資料是直接存在硬碟,使用者的資料完全都是存在資料庫系統當中。這篇文章我們會學習怎開資料庫帳號、新增資料庫、新增資料表。

事前準備

  1. 安裝好SQL Server 資料庫
  2. 安裝好SSMS
  3. 設定調整

開啟SSMS

SSMS LOGO

開啟SSMS

搜SSMS 然後開啟SQL Server Management Studio 20

SSMS 連線資料庫

連線

我這邊是連線開發環境,因此伺服器名稱跟驗證都不需要修改

只要勾選「信任伺服器憑證」>連線

新增資料庫

資料庫>新增資料庫”></p>



<p>先點資料庫>新增資料庫</p>



<p><img class=開啟PartyRegister資料庫

展開至資料表

可以將資料庫旁邊的+點開,可以看到剛新增的資料庫PartyRegister

普遍我們會打開到資料表的位置。

新增一張資料表

資料表 新增 資料表

資料表用滑鼠點右鍵>新增>資料表

畫面說明

一般來說,重點在

  1. 欄位名,自己取名
  2. 資料類型,字串、數字
  3. 描述:備註這個欄位要存什麼等等的備註。

資料庫欄位型態對應懶人包

資料表的欄位如同Excel的欄位,不過資料庫本身會嚴格去限制資料庫內的資料類型。

我自己的筆記大概是這樣

輸入的資料資料類型分類SQL SERVER資料類型C#對應變數類型備註
多語言文字多語言文字nvarcharstring不確定內容的
英文、數字、標點文字varcharstring帳號、身份證字號、Email
2024/2/14 0800日期時間(單一時區)DateTime2DateTime日期時間
2024/2/14 0800+8:00日期時間(多時區)datetimeoffset(7)DateTimeOffset日期時間+時區
123456數字int or doubleint or long整數 or 長整數
1000元金額decimaldecimal金額
19.3小數float or doublefloat or double不是金額的小數點,看精確度進行選擇
是/否 (單選)布林bit(1)bool單一Checkbox會用這種,例如「啟用」
單選(下拉選單或Radio)數字intint多數時候會直接用數字代表,這個作法稱為Magic Number
單選(下拉選單或Radio)文字varcharstring有時會直接存文字
checkbox 多選
(CheckboxList)
文字varcharstring用逗點分隔選擇的項目
例如:
1,2,3,18,23

多選checkbox

多選在資料庫比較特別,存在資料庫大致上有三種作法

  1. 單一文字欄位使用逗點或分號分隔,或存入json 陣列,最常見,但比不容易搜尋與統計。
  2. 多個bit欄位代表,一個欄位一個bit,代表一個勾,如果多選的項目是固定的多半會使用這個方式,例如場地開放時間的星期幾,這作法好處是搜尋時候效率會好很多。
  3. 關聯資料表,放在另一張資料表(最少見),這情況是要快速統計,但同時選項又是會變動的才會這樣做。

PK Primary Key (ID 欄位)

PK = 主鍵 = 主索引鍵 = Primary Key

資料庫的世界,通常每筆資料都會有一個欄位作為主要索引,這個欄位的每一筆值都不能重複是重點,用途類似點餐單上的單號或寄送包裹時候的郵件編號,要製造這個值普遍上作法有幾種作法

  1. 自動增加的int 欄位,自動跳號的流水號。這個做法最常使用,慣例上會用這個欄位作為PK並且取名為ID,優點就是速度快,找資料的速度也快,缺點是資安比較薄弱,再來遇到資料表或資料庫要合併時要重新產生會相當麻煩,但我一律推薦普通的資料用這個。
  2. GUID欄位,這個做法第二常見會產生一串類似e3750be7-dc3d-48fd-af1f-9efccac4e1c5這樣的值,這個優點是因為GUID的資料目前沒辦法猜,缺點是關聯式資料庫用這個當索引效率會超級差,通常跟帳號有關的我推薦用這個。
  3. 單一自訂的欄位,例如發票號碼、郵件編號、身份證字號、銀行戶頭帳號、表單編號,要這樣設計時,同時還要設計產生編號的規則與取號程式,設計時也需怎處理好索引效率問題。
  4. 多欄位作為主鍵,我看過用身分證字號+生日兩個欄位作為主鍵的,實際上發生嚴重的效率問題,不知道誰腦袋撞到這樣設計。

每張資料表盡量都要有一個PK欄位,強烈要求「只有」一個,多個PK欄位會造成尋找效率緩慢,而且擴充上問題很多。

建立第一個欄位 ID

欄位設定

  1. 資料行名稱輸入ID
  2. 資料類型int
  3. 允許Null不要勾
  4. 描述輸入「主鍵」
  5. 下方的資料行屬性找到「識別規格」點選 > 可以展開
  6. 將「為識別」改成「是」

設定為主索引鍵

設定為主索引鍵

對著ID的前面按下滑鼠右鍵,選擇設定主索引鍵,設定好之後會看到如下圖,會多一個金鑰匙的圖案

設定好主索引鍵 金鑰匙的圖示

加入報名表的欄位

報名表單上的欄位

  • 姓名 TextBox 標籤lbName 輸入框tbName
  • 性別(男女其他)RadioButtonList 標籤lbGender 輸入框rbGender
  • 生日(西元年月日)TextBox 標籤lbBirthday 輸入框tbBirthday
  • 身分證字號(10碼)TextBox標籤lbROCID 輸入框tbROCID
  • 信箱 TextBox標籤lbEmail 輸入框tbEmail
  • 電話 TextBox標籤lbPhone 輸入框tbPhone
  • 飲食(葷食、素食)RadioButtonList 標籤lbFood 輸入框rbFood
  • 活動場次(三個日期單選):1月場次 2月場次 3月場次 RadioButtonList 標籤lbEventId輸入框rbEventId
  • 送出按鈕Button btnSubmit

整理成資料庫欄位

資料表欄位設計

  • 姓名 Name 資料類型 nvarchar(50)
  • 性別(男女其他)Gender 資料類型 int
  • 生日(西元年月日)Birdthday 資料類型 lbBirthday
  • 身分證字號(10碼)ROCID 資料類型 varchar(10)
  • 信箱 Email 資料類型 varchar(200)
  • 電話 Phone 資料類型 varchar(20)
  • 飲食(葷食、素食)Food 資料類型 int
  • 活動場次:EventId 資料類型 int
  • 報名時間:CreateTime 資料類型 DateTime2

說明:

  1. 姓名除了中文可能還會有其它語言,像是日文,所以用 nvarchar(50),如果遇到人名很長的,擴充長度就好,但普遍50已經夠用多數情境。
  2. 性別、活動場次、食物 等單選項目使用int 代表對應的選擇項目。
  3. 身份證字號跟Email因為不會出現中文字,所以使用varchar就好。
  4. 身份證字號的欄位普遍會用ROCID ,我待過幾間公司的政府專案都這樣命名。
  5. 電話的格式雖然普遍都是數字,但會出現0933-111-1110800-000-333 普遍就會用varchar。順便一提,如果你使用int,會發生0900存入後變成900,會被去除前面的0,所以千萬不能用int儲存電話
  6. 報名時間是額外記錄的,我們順便在預設值輸入getdate(),這樣系統就會以這筆資料產生時間作為預設值。

varchar其實也能存中文字,不過遇到某些字例如「堃」就會變成?? 或奇怪的字元,根本原因是varchar一個字的編碼長度是nvarchar的一半而已,所以不只外文,許多中文字也會變成亂碼。因此普遍有需要中文或其它字元的內容一律使用nvarchar

Q為什麼文字欄位不統一使用nvarchar(max)就好

  1. 以前的硬碟很貴,所以儲存空間是嚴格限定的,這跟系統資源管理有關。
  2. 效率
  3. 資料一致性限制,限制資料長度減少異常資料。

儲存資料表

新資料表設計好了之後,我們可以按下ctrl+s儲存,這時候就會詢問資料表名稱

輸入Regist

然後關閉這個設計(有需要修改還是可以叫出來)

儲存

重新整理資料表

重新整理後就匯出現剛新增的資料表

整理後就出現了

下一堂課 SSMS的基本操作

下一堂課會教一些基本SQL操作

0 Comments

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *