麻辣家族討論版版's Archiver

小誌 發表於 2011-4-23 23:02

11-1-1 資料庫規劃

[color=darkred][size=4][b]11-1-1   資料庫規劃[/b][/size][/color]
在MySQL資料庫「Message」中,我們將全部的留言記錄都擺放在「allmessage」資料表中,為了讓您了解各個欄位的作用,筆者皆以中文為欄位命名:
[table]
[tr][td=1,1,117][p=30, 2, center][b][size=2]欄位名[/size][/b][/p][/td][td=1,1,110][p=30, 2, center][b][size=2]資料型態[/size][/b][/p][/td][td=1,1,51][p=30, 2, center][b][size=2]長度[/size][/b][/p][/td][td=1,1,95][p=30, 2, center][b][size=2]允許NULL[/size][/b][/p][/td][td=1,1,103][p=30, 2, center][b][size=2]預設值[/size][/b][/p][/td][/tr]
[tr][td=1,1,117][p=30, 2, left][color=#000000][size=2][font=細明體]編號[/font][/size][/color][/p][/td][td=1,1,110][p=30, 2, left][font=Courier New][color=#000000][size=2]int[/size][/color][/font][/p][/td][td=1,1,51][p=30, 2, center][font=Courier New][color=#000000][size=2]11[/size][/color][/font][/p][/td][td=1,1,95][p=30, 2, center][color=#000000][size=2][font=細明體]否[/font][/size][/color][/p][/td][td=1,1,103][p=30, 2, center][color=#000000][size=2][font=細明體]註[/font][font=Courier New],[/font][font=細明體]自動編號[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,117][p=30, 2, left][color=#000000][size=2][font=細明體]留言時間[/font][/size][/color][/p][/td][td=1,1,110][p=30, 2, left][font=Courier New][color=#000000][size=2]datetime[/size][/color][/font][/p][/td][td=1,1,51][p=30, 2, center][font=Courier New][color=#000000][size=2]4[/size][/color][/font][/p][/td][td=1,1,95][p=30, 2, center][color=#000000][size=2][font=細明體]是[/font][/size][/color][/p][/td][td=1,1,103][p=30, 2, center][font=Courier New][color=#000000][size=2]-[/size][/color][/font][/p][/td][/tr]
[tr][td=1,1,117][p=30, 2, left][color=#000000][size=2][font=細明體]留言主題[/font][/size][/color][/p][/td][td=1,1,110][p=30, 2, left][font=Courier New][color=#000000][size=2]varchar[/size][/color][/font][/p][/td][td=1,1,51][p=30, 2, center][font=Courier New][color=#000000][size=2]100[/size][/color][/font][/p][/td][td=1,1,95][p=30, 2, center][color=#000000][size=2][font=細明體]是[/font][/size][/color][/p][/td][td=1,1,103][p=30, 2, center][font=Courier New][color=#000000][size=2]-[/size][/color][/font][/p][/td][/tr]
[tr][td=1,1,117][p=30, 2, left][color=#000000][size=2][font=細明體]網友姓名[/font][/size][/color][/p][/td][td=1,1,110][p=30, 2, left][font=Courier New][color=#000000][size=2]varchar[/size][/color][/font][/p][/td][td=1,1,51][p=30, 2, center][font=Courier New][color=#000000][size=2]16[/size][/color][/font][/p][/td][td=1,1,95][p=30, 2, center][color=#000000][size=2][font=細明體]是[/font][/size][/color][/p][/td][td=1,1,103][p=30, 2, center][font=Courier New][color=#000000][size=2]-[/size][/color][/font][/p][/td][/tr]
[tr][td=1,1,117][p=30, 2, left][color=#000000][size=2][font=細明體]聯絡信箱[/font][/size][/color][/p][/td][td=1,1,110][p=30, 2, left][font=Courier New][color=#000000][size=2]varchar[/size][/color][/font][/p][/td][td=1,1,51][p=30, 2, center][font=Courier New][color=#000000][size=2]50[/size][/color][/font][/p][/td][td=1,1,95][p=30, 2, center][color=#000000][size=2][font=細明體]是[/font][/size][/color][/p][/td][td=1,1,103][p=30, 2, center][font=Courier New][color=#000000][size=2]-[/size][/color][/font][/p][/td][/tr]
[tr][td=1,1,117][p=30, 2, left][color=#000000][size=2][font=細明體]圖形[/font][/size][/color][/p][/td][td=1,1,110][p=30, 2, left][font=Courier New][color=#000000][size=2]varchar[/size][/color][/font][/p][/td][td=1,1,51][p=30, 2, center][font=Courier New][color=#000000][size=2]2[/size][/color][/font][/p][/td][td=1,1,95][p=30, 2, center][color=#000000][size=2][font=細明體]是[/font][/size][/color][/p][/td][td=1,1,103][p=30, 2, center][font=Courier New][color=#000000][size=2]-[/size][/color][/font][/p][/td][/tr]
[tr][td=1,1,117][p=30, 2, left][color=#000000][size=2][font=細明體]留言內容[/font][/size][/color][/p][/td][td=1,1,110][p=30, 2, left][font=Courier New][color=#000000][size=2]text[/size][/color][/font][/p][/td][td=1,1,51][p=30, 2, center][font=Courier New][size=2][color=#000000] [/color][/size][/font][/p][/td][td=1,1,95][p=30, 2, center][color=#000000][size=2][font=細明體]是[/font][/size][/color][/p][/td][td=1,1,103][p=30, 2, center][font=Courier New][color=#000000][size=2]-[/size][/color][/font][/p][/td][/tr]
[tr][td=1,1,117][p=30, 2, left][color=#000000][size=2][font=細明體]板主回覆[/font][/size][/color][/p][/td][td=1,1,110][p=30, 2, left][font=Courier New][color=#000000][size=2]text[/size][/color][/font][/p][/td][td=1,1,51][p=30, 2, center][font=Courier New][size=2][color=#000000] [/color][/size][/font][/p][/td][td=1,1,95][p=30, 2, center][color=#000000][size=2][font=細明體]是[/font][/size][/color][/p][/td][td=1,1,103][p=30, 2, center][font=Courier New][color=#000000][size=2]-[/size][/color][/font][/p][/td][/tr]
[tr][td=1,1,117][p=30, 2, left][color=#000000][size=2][font=細明體]板主回覆時間[/font][/size][/color][/p][/td][td=1,1,110][p=30, 2, left][font=Courier New][color=#000000][size=2]datetime[/size][/color][/font][/p][/td][td=1,1,51][p=30, 2, center][font=Courier New][color=#000000][size=2]4[/size][/color][/font][/p][/td][td=1,1,95][p=30, 2, center][color=#000000][size=2][font=細明體]是[/font][/size][/color][/p][/td][td=1,1,103][p=30, 2, center][font=Courier New][color=#000000][size=2]-[/size][/color][/font][/p][/td][/tr]
[tr][td=1,1,117][p=30, 2, left][color=#000000][size=2][font=細明體]私人公開[/font][/size][/color][/p][/td][td=1,1,110][p=30, 2, left][font=Courier New][color=#000000][size=2]char[/size][/color][/font][/p][/td][td=1,1,51][p=30, 2, center][font=Courier New][color=#000000][size=2]1[/size][/color][/font][/p][/td][td=1,1,95][p=30, 2, center][color=#000000][size=2][font=細明體]是[/font][/size][/color][/p][/td][td=1,1,103][p=30, 2, center][font=Courier New][color=#000000][size=2]-[/size][/color][/font][/p][/td][/tr]
[/table][p=30, 2, left][size=2][color=#000000][font=Arial Narrow]Allmessage[font=華康中黑體]資料表[/font][/font][/color][/size][/p]

[attach]5748[/attach]
圖11-2  資料表結構。
[color=Red]註:「[/color]編號」欄位是主索引鍵欄位,內容是不可重複的,以作為每筆留言記錄的紀錄識別,而其資料內容是數值且會自動遞增編號。

自動編號的欄位資料型態必須是tinyint、smallint、int、bigint、numberic()…等,也就是說:自動編號的欄位資料都是整數,當我們新增一筆資料錄時,MySQL Server會自動遞增原本最後一筆資料的欄位內容,並將遞增後的結果填入新增資料錄的欄位中,這個欄位的值我們不必自己填入,同時,自動編號欄位的資料也不允許我們自己編輯的。

要讓欄位成為自動編號欄位,除了資料型態必須是整數設定外,當欄位中的資料值一旦使用過,就不會再重複使用。數值型態的欄位採用自動量設定,即每增加一筆新紀錄,該欄位的值就會自動加1,當一筆新資料紀錄插入資料表時,其中的設定為AUTO_INCREMENT欄位值必須存入NULL值、0或空白值,也可以指定存入一個數值資料,但是假如該數值資料已經存在的話,則會產生錯誤;假如所插入的數值資料為該欄位現有數值資料的最大值,則下一筆增加的資料記錄,其欄位值將會以此數值資料值加1。

小誌 發表於 2011-4-23 23:05

當新增一個資料表,並指定其中一個欄位為AUTO_INCREMENT時,可以在插入第一筆資料時指定一個值存入,則該值自動成為AUTO_INCREMENT的初始值(自動編號欄位的「種子(seed)」),除此之外,在使用phpMyAdmin新建資料表並指定欄位為AUTO_INCREMENT時,亦可同時指定該欄位的「預設值」,此預設值即成為AUTO_INCREMENT的初始值。
以「allmessage」資料表的「編號」欄位為例,說明如何設定自動編號欄位:
[attach]5749[/attach]
圖11-3   設定自動編號欄位。

1、將欄位資料型態設定為整數int。
2、將欄位的「附加」選項選定為「AUTO_INCREMENT」,此時欄位即成為自動編號欄位。
3、於「預設值」欄位中填入自動編號起始值。

若想要得知最新插入之AUTO_INCREMENT數值,可以使用:
[list]
[*]MySQL的LAST_INSERT_ID()函數,此函數是依據目前連線來決定最新的值。
[*]PHP 函數mysql_insert_id(),可取得最後一次執行了新增查詢(INSERT)後,由AUTO_INCREMENT 定義的欄位值。
[/list]
[b]「留言時間」欄位[/b]:設定其預設值為「GETDATE()」,用以取得日期時間,這樣做的目的是為了在新增資料錄時,SQL Server會自動填入欄位資料(資料新增的日期時間)。
[b]「私人公開」欄位[/b]:因為我們儲存資料的情況只有兩種:公開(0)與私人的不公開(1),所以選用欄位的資料型態為「bit」。
[b]「圖形」欄位[/b]:用來儲存網友發言時,代表圖形的圖檔名稱(只取主檔名),而圖檔的名稱我們又是以數字來命名,分別為0~10.gif,如果選取的圖片為5.gif,則欄位的內容則為「5」。
[attach]5750[/attach]
圖11-4   發言代表圖形。

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供