我想爲事件設計一個數據庫並跟蹤大量關於它的統計信息。設計數據庫以存儲具有很多值的記錄的最佳方式是什麼?
選項1
爲Events
創建一個表,並把我所有的統計數字列吧。就像男性的數量,女性的人數,身份不明性別的數量,當天的溫度,時間就開始了,任何打架,被警方叫,等
查詢將是一個非常簡單的select * from events
選項2
創建兩個表格,一個用於Events
,另一個用於EventsAttributes
。在Events
表中,我將存儲重要的東西,如id,事件標題和開始/結束時間。
在EventsAttributes
我會存儲所有事件統計信息並將它們鏈接回Events
並使用eventId
外鍵。
該查詢如下所示。 (attributeType == 1
將代表男性的數量)
select e.*, (select ev.value from EventAttributes ev where ev.eventId = e.id and attributeType = 1) as NumberOfMale from Events e
查詢將不會是直線前進的選項1,但我想設計的正確方法,並與凌亂查詢生活。
那麼哪個選項是正確的做法,爲什麼(我不是數據庫管理員,但好奇)。
謝謝你的時間。
選項1聽起來像是解決這個問題的典型方法。選項2聽起來像EAV(實體屬性值),這是一種非常罕見的邪惡反模式。把表看作一種保存實體所有屬性的方法,在這種情況下是一個事件。我可能會考慮一些額外的表格,用於在事件期間可能發生一次以上的事情(如警察電話,受傷等)。 –
在選項2中,您忘記了第三個表AttributeTypes。如果你將這個查詢硬編碼到你的應用中,那確實是一件壞事。 –
@RogerWolf你是對的。我忘了提到這一點。 – HDoan