Sql-Server
只有文本欄位的數據庫
我開始研究現有的 SQL Server 數據庫系統,其中大部分欄位都儲存為文本。除了一些 ID,所有欄位都是 varchar(電話號碼、郵政編碼、日期、地址、貨幣價值等)。
這不是我學會建構數據庫的方式。當被問及同事說,這樣更容易。將所有欄位保留在 varchar 中是不好的做法嗎?我怎麼能爭辯說它應該改變呢?
尺寸是考慮因素之一。An
int
最多可以容納四個字節的 -2,147,483,648。Achar
需要 11 個字節來保存相同的值。有內置函式來操作各種數據類型。
DATEADD()
並且DATEDIFF()
是兩個例子。日期儲存為文本是不可能的。不斷CAST
地來回處理不會產生有效的處理或清晰的程式碼。自動驗證是全文本方法的另一個優勢。您可能認為一列包含日期,但沒有什麼可以阻止某人輸入值“2014-13-97”。
排序不太可能給出“真正”數字的列的預期結果。例如,如果一列包含整數 ‘1’ 到 ‘100’,並且查詢按此列排序,則預期結果為
1, 2 .. 10, 11 .. 20, 21 .. 100
但是,實際結果更有可能是
1, 10, 100, 11, 12, 2, 20, 21 ...
日期可能存在類似的問題,具體取決於所選的字元表示。同樣類型鑄造可以用前面提到的成本來解決這個問題。
有時您會發現僅包含數字的字元串。範例是國民身份證號碼、銀行帳號、電話號碼等。這些值的共同特徵是對它們執行計算沒有意義。在其他條件相同的情況下,將它們儲存為列可能
char()
是可以的,特別是如果它們具有可選的嵌入式字母字元,但上述注意事項仍然適用。