天天看點

讓你提前知道軟體開發(27):建立資料庫表和索引

大家好,又見面了,我是全棧君。

文章2部分 資料庫SQL語言

資料庫表及索引的建立

資料表(或稱表),是資料庫最重要的組成部分之中的一個。資料庫僅僅是一個架構。資料表才是事實上質的内容。舉個樣例來說,資料庫就像是一座空曠的房子。而資料表是裡面的家具,沒有家具的房子僅僅是一個空殼而已。依據資訊的分類情況,一個資料庫中可能包括若幹個不同用途的資料表。

表結構有簡單、有複雜,這就對開發者提出了要求。

怎樣設計一個表的字段才是最好的?表的字段怎樣命名?怎樣定義表字段的類型?怎樣建立索引?等等。

1. 改動之前的建表腳本

在作者從事過的某項目中,有一個建表腳本(基于Sybase資料庫)樣比例如以下:

— XXX

create table tb_XXX

(

AAA varchar(30) not null, — AAA

BBB int not null, — BBB

. . . . . .

. . . . . .

processtime1 varchar(24) default(”) null, — yyyy.mm.dd hh24:mi:ss

processtime2 varchar(24) default(”) null, — yyyy.mm.dd hh24:mi:ss

processtime3 varchar(24) default(”) null, — yyyy.mm.dd hh24:mi:ss

. . . . . .

nextprocesstime varchar(24) default(”) not null, — yyyy.mm.dd hh24:mi:ss

. . . . . .

)

go

create unique index idx1_tb_XXX on tb_XXX(AAA)

create index idx2_tb_XXX on tb_XXX(BBB)

go

能夠看出,以上的建表腳本至少存在下面問題:

(1) 字段命名不是非常恰當。如紅色字型所看到的的processtime1、processtime2、processtime3,在看完之後,還不知道它們究竟是什麼意思。是以,對于字段的命名,要做到直覺易懂。不要讓别人去猜。

(2) 時間字段的預設值為空。

如紅色字型所看到的的nextprocesstime字段,其預設值為空。一般而言。對于資料庫建表腳本中的時間字段。如無特殊用途,其預設值最好設定為目前時間。

(3) 建立的索引數目過少,且在時間字段上面未建立索引。在表中非常多個字段,而僅僅建立了兩個索引,個數偏少,可考慮添加索引數目。此外,表中有多個時間字段,但未在其上面建立索引。要求僅僅要在表中出現了時間字段,都要考慮在其上建立索引。

2. 改動之後的建表腳本

改動之後的腳本樣比例如以下:

— XXX

create table tb_XXX

(

AAA varchar(30) not null, — AAA

BBB int not null, — BBB

. . . . . .

. . . . . .

firstprocesstime varchar(24) default(”) null, — yyyy.mm.dd hh24:mi:ss

secondprocesstime varchar(24) default(”) null, — yyyy.mm.dd hh24:mi:ss

thirdprocesstime varchar(24) default(”) null, — yyyy.mm.dd hh24:mi:ss

. . . . . .

nextprocesstime varchar(24) default convert(varchar,getdate(),102)+’ ‘+convert(varchar,getdate(),108) not null, — yyyy.mm.dd hh24:mi:ss

. . . . . .

)

go

create unique index idx1_tb_XXX on tb_XXX(AAA)

create index idx2_tb_XXX on tb_XXX(BBB)

create index idx4_tb_XXX on tb_XXX(nextprocesstime)

go

改動的地方如紅色字型所看到的。與之前的腳本相比,改動了nextprocesstime字段的預設值,将索引數目添加到3個,在時間字段上建立了索引。

此外,依據一般的經驗,大表索引個數不超過5個,索引最大字段數不超過4個。

3. 總結

表是資料庫中最重要的資料結構之中的一個。在建立表的過程中,一定要遵循命名規範、資訊準确、索引恰當等原則。

版權聲明:本文部落格原創文章,部落格,未經同意,不得轉載。

釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/117297.html原文連結:https://javaforall.cn