如何避免被識破你什麼都不會?
來自專欄 有財家的雜談
閑扯
昨天你成功的入職當了一個公司的DBA,而且很幸運這個公司的伺服器竟然用Windows,你在老闆的注視下順利的裝好了MySQL而且建了一張表,老闆內心舒了一口氣:「我們這個小公司終於招來了一個靠譜的DBA」。
這時一旁穿著格子襯衫,頭髮亂的跟草一樣的程序員來找你了:「Hey,我需要存一些數據進去,你知道的,我們要做一個考勤系統,需要一張表,存員工的考勤信息。」
你想了一下,這個和學生成績表也差不多嘛,於是你問了程序員他都要存什麼進去,程序員列舉如下:
- 工號
- 員工姓名
- 打卡日期
- 上班打卡時間
- 下班打卡時間
- 員工直屬領導工號
- 備註
建表開始
你第一時間就想起來我之前告訴你的,數據放在表裡,你又知道了程序員要的就是一個一個的欄位。
於是你開始動手寫建表的SQL。現在我們開始考慮一下程序員要的欄位都是什麼類型的,給欄位分配合適的類型會讓表變得優雅而且高效。
工號這個看起來就是一個數字,所以我們找個數字類型給它存起來。那麼MySQL支持多少數據類型呢?總的來說,MySQL支持整形和浮點型兩種數據類型,通俗點說就是支撐整數和小數。
這裡先說說整數,比如說工號,這東西一般小公司里幾十號人,從1開始編,100也就夠了,如果考慮到以後公司會做大,那麼30000也夠了。我們選擇一個叫做smallint的類型來保存,int在編程語言里大部分情況下都是整形的意思,smallint就是小整形,這個smallint的支持範圍是[-32768, 32767]。
再說說員工姓名,姓名就是一個文本,至少在Excel里這個名詞是成立的。我們知道,每個漢字稱作一個字元,那麼好多個漢字放在一起,就是一串字元,叫做字元串。中國人的姓名一般也就是不超過四個字,所以我們選擇char(4),char是character的縮寫,括弧里的是長度,這個char(4)的意思是,最多保存4個字元。
下面說說打卡日期,每一天都會產生打卡記錄,因此日期一般是:2018-04-11這樣,這時我們的選擇是date類型。
接下來是上下班打卡時間,時間一般我們會寫成14:30:21這樣子,我們選擇time類型去保存。
直屬領導工號和員工工號是一樣的,都選擇smallint。
備註,注意這裡的備註,你不知道備註里要寫什麼,程序員可能填一下今天的特殊情況,比如:此人回家結婚去了。也有可能是:此人是領導,不需要打卡。雖然是字元串,但是感覺長度不確定,或者說沒有姓名那麼容易確定一個範圍。如果我們規定備註長度不超過128個字元,那麼我們選擇char(128),看起來似乎沒有什麼不妥,但是會有人給備註里填寫僅僅一個字的情況發生。這個時候char(128)是不合適的,因為填寫一個字進去,MySQL也會自動的給後面補上127個空格,這樣保存起來,明顯會有很多浪費。
這個時候,我們的選擇是varchar(128)。varchar是變長字元串的意思,比如說我就寫了一個字,varchar(128)就會僅僅保存一個字,而不會做空格填充,省了好多存儲空間。也就是說,你填幾個字,varchar就給你存幾個字,只要不超過它的長度限制即可。
至於到底有多少種數據類型,一定要參考官方文檔:
MySQL Document
重點看Numeric Types,String Types和Date and Time Types這三個大類基本上就夠了,能覆蓋平時工作的大部分場景了。
總結
存數據要放在磁碟的文件中,這些文件稱作資料庫,資料庫在MySQL中可以認為是一個文件夾,具體的數據存儲由一張張的表去完成,這些表可以認為是文件夾中的文件。
因此我們應該首先建庫,然後建表,然後存儲數據進去。
下次我會講講增刪改查的SQL怎麼寫。
閑扯
今天的題圖是雪中的一條路,學資料庫,這裡才算開始,未來的路還有很長,而且想學的很深入,難免會有種走在寒冷的路上的感覺,總想放棄。
但是雪中風景也很美麗。
推薦閱讀: