假設我有以下表模式處理數據庫模式中的缺失值?
MONTH VARCHAR(10)
HASRAIN BOOLEAN
YEAR INTEGER
現在假設某年,我有11個月值,但沒有價值的遺留月(姑且稱之爲9月)。
它是更正確的:
將一個記錄與零值,或
不留記錄當月
我的問題是:如何模擬數據庫模式中信息的缺失?
假設我有以下表模式處理數據庫模式中的缺失值?
MONTH VARCHAR(10)
HASRAIN BOOLEAN
YEAR INTEGER
現在假設某年,我有11個月值,但沒有價值的遺留月(姑且稱之爲9月)。
它是更正確的:
將一個記錄與零值,或
不留記錄當月
我的問題是:如何模擬數據庫模式中信息的缺失?
如果不需要關於某個實體的信息來理解另一個實體,那麼這些信息在認知上並不相互依賴,並且可以進行歸一化。
這是什麼意思,在一般的做法是,你應該爲兩個實體分開表,並使用外鍵在它們之間引用。
想象一下:
Table weather_month:
------------
month ENUM('Jan', 'Feb', Mar' ...) NOT NULL,
year mediumint NOT NULL,
weather_id mediumint,
PRIMARY KEY(month, year)
Table weather:
------------
weather_id mediumint NOT NULL
rain BOOLEAN NOT NULL,
clouds ENUM('Clear', 'Sparse', 'Thick', 'Cumulus', ...) NOT NULL,
temperature ENUM('Freezing', 'Thawing', 'T-shirt weather', 'Hot', ...) NOT NULL
這個例子展示了我們如何知道無論天氣如何,或者我們不知道。
如果你會在weather_month表中放置大量的可空字段(這是一個相當常見的做法),它不會像在這個設置中那麼清晰,你可以觀察天氣或者你沒有。
關係數據庫對於「我沒有價值」使用NULL,但是您應該真正考慮如何使用它,因爲您所做的數據庫設計應該爲您的數據結構說話,如果它爲自己說話,您不會有向人們解釋。節省您的時間。
在存儲效率方面,NULL可能更合適,特別是如果您期望它們中的大多數沒有價值。否則,根據您的業務需求,0也可以做到這一點。
此外,您可能需要考慮如何輕鬆地查詢沒有記錄。說在某一年,你有幾個月沒有價值。如果您將它們保存在特定列的w 0/NULL表中,彙總它會更容易。
看起來像兩個表對我說:
CALENDAR
+----+-----+
|YEAR|MONTH|
+----+-----+
WEATHER
+----+-----+-------+
|YEAR|MONTH|HASRAIN|
+----+-----+-------+
所有月份將包括在日曆表。 WEATHER表中只包含具有天氣信息的月份。
無記錄或無記錄 - 如果您添加了零值,您如何分辨「根本沒有下雨」和「我不知道下了多少雨」 – stuartd