2016-10-02 143 views
1

UPDATE:關係模型可能無法在我想它,看到的方式工作:Database normalization for facebook-like messaging system 時間對NoSQL的! 函數依賴

我無法將數據庫放入2nf。爲此,必須確定所有函數依賴關係,然後才能確定屬性是否爲素數。

看一看這裏:

-------------------------------------------- 
    to | from | msg   | time 
--------|--------|----------------|--------- 
    joe | jim | hello   | 1 
    jim | joe | hey   | 2 
    jim | joe | how are you | 3 
victor | bryce | i love carrots | 4 
    joe | jim | im doin great | 5 
    bryce | jim | hello   | 6 

注:時間將是獨一無二的。它將被交易。

是否時間>消息儘管

time1->"hello" 
time6->"hello" 

因爲我只要有唯一的消息的情況下聽到了,它的罰款。但是,我對此感到困惑。

此外,我想添加一個消息ID列。這是不錯的做法嗎?

+0

編輯中的鏈接有一個*可憐的*答案。 –

回答

1

功能依賴問:「如果我知道'X'的一個值,我是否知道'Y'?'的一個值,其中'X'和'Y'是關係的屬性。 (「X」和「Y」指屬性集

如果屬性的「時間」的值實際上是唯一的,那麼知道一個值「時間」是指您知道的,只有一個值爲「味精」。這意味着函數依賴關係time-> msg適用於這種關係。因爲知道值「joe」意味着我知道兩個值爲「味精」:'你好',''和'''「,因此,函數依賴關係」我做的很棒'。它不適用於這個關係,所以我們說「到」 - >「msg」不是這個關係中的函數依賴關係。

由於完全相同的原因,「to,from」 - >「msg」不適用於此關係。因此,「來自」 - >「味精」不是這種關係中的函數依賴。

此外,我想添加一個消息id列。這是不錯的做法嗎?

添加不在原始關係中的屬性與數據壓縮有關,與標準化無關。規範化從不會引入新的屬性或新的依賴關係。添加「msg_id」作爲屬性引入了兩個新的函數依賴關係(取決於「msg_id」的含義):「msg_id」 - >「msg」和「time」 - >「msg_id」。

因此,添加「msg_id」屬性有時可能是一個好主意(比您想象的要少),但它與規範化無關。假設你打算將「msg_id,msg」作爲一個新表格並從原始關係中刪除「msg」,你需要聲明「msg」也是唯一的。

+0

你會如何修復這個數據庫以使其在實際中能夠正常工作,所以我可以將它變爲2nf –

+0

@SteveWebster:如果「時間」 - >「到」,「來自」,「味精」,這似乎是合理的,這種關係已經在BCNF。這意味着它也屬於3NF,2NF和1NF。非正式地,因爲a)「時間」是唯一的候選關鍵字,並且b)「時間」是單列,它必須在2NF。 (你必須在候選關鍵字中有多個列,然後纔能有部分關鍵字依賴關係。)由於「時間」是函數依賴關係左側的唯一屬性,因此不會有傳遞依賴關係,因此它必須在3NF。由於每個FD中的每個箭頭都是從候選鍵中移出的箭頭,因此它必須位於BCNF中。 –

+0

但在實踐中,會不會「時間」 - >「味精」持有? 2味精很可能repeat.in社交網站 –