2014-05-18 30 views
0

語境:的用戶創建了一些問題,水平的挑戰,在一個城市,某一天的某一時刻。在數據庫上有重複的記錄,總是錯誤的?

用戶可以有更多的相同主題,水平的挑戰,在同一個城市,同一天同一時間(同時演奏的挑戰)。

挑戰可以一次創建一個。

在我實際的表,我有這種情況重複記錄(具有不同的主鍵值)。這是錯的嗎?它應該如何?

表的挑戰:

id_challenge INT (pk auto increment) 
id_subject INT 
id_level INT 
id_city INT 
id_user INT 
date DATE 
time TIME 
comment VARCHAR(100) 
+0

實際上,您試圖建模的實體是單獨可識別的事物,而您的數據庫記錄的事實是不同的事實。如果一個表格重複了這些事實,那麼它就不是真實而精確的現實表徵。 – sqlvogel

+0

如果主鍵值不同,行在技術上不會「重複」。當然,真正的問題是,如果將多個這樣的行「合併」爲一個行,並且這由您的業務規則決定(即,這兩個選項都不是「絕對」錯誤 - 這取決於您要完成的工作)。 –

回答

1

從技術上講,我不相信這些記錄被「複製」 本身,因爲它們指的是兩個不同的實體 - 即使comment可相同。我當然指的是挑戰#79和#80分開處理,即使他們有相同的數據。也就是說,用戶的挑戰清單上,他們都參加了,他們可以列出挑戰兩個單獨的行。同樣的比喻延伸到城市挑戰列表。

但是,如果你發現自己的分組,計數,或者對這些行排序,以去除重複,這是一種氣味。即使UI只允許您一次創建一個,但每個新組合都將更多地是可以多次調用的「配置文件」。要麼存儲數量,要麼擁有父級「挑戰配置文件」表可能是更好的選擇。

此外,如果「重複」的行數以百萬計的每個給定的組合,你可以看到在迫使一些發行規模效益,宣佈他們複製和正火。但即便如此,存儲價格便宜,而且這張100萬張的紀錄只有幾MB。


但是......恕我直言用戶創建多個行一個接一個以這種方式可能表明的東西,需要重新設計的事實 - 可能無論是在前端和後端。