我正在記錄來自用戶的表單數據,並將該數據存儲在MySQL數據庫中。許多問題是是/否問題。經過一些研究,我決定與TINYINT一起爲數據類型。現在,如果其中一個問題需要一個文本輸入,如果答案是「是」,但如果答案是「否」,那麼不會輸入文本,我將需要一個VARCHAR。MySQL使用NULL/NOT NULL VARCHAR而不是TINYINT
CREATE TABLE `UserResponse` (
`question1` TINYINT NOT NULL, # 0="No", 1="Yes"
`question1Details` VARCHAR(45) NULL
)
所以我的問題是......由於VARCHAR永遠是NULL當TINYINT爲0,那就更有意義,只是有VARCHAR,忘了TINYINT爲「是」 /「否」 ?
CREATE TABLE `UserResponse` (
`question1` VARCHAR(45) NULL # NULL="No", !NULL="Yes" + details
)
我的想法:用兩列,如果有(可能意味着40列,而不是20,例如)這類問題的許多情況下可能擾亂數據庫。至於空間......無論是否需要VARCHAR,其值都不受我們是否使用TINYINT的影響。所以,如果我們刪除了TINYINT,它將爲每行每個實例節省1個字節。我所看到的唯一不利之處是讀取/修改表的前端代碼會稍微複雜一點,因爲必須解釋NULL/NOT NULL才能從同一列中獲取2個問題的數據,而不是讀取每個問題關係簡單1列。
無論哪種方式可以完成,並且任何一種方式都可以正常工作。但是,最佳做法是什麼?如果您在處理由其他人設計的數據庫時遇到任何一種方法,那麼他們使用該方法而不是另一種方法會對您有影響嗎?