我曾在Dzone看過關於發佈和發佈細節(兩個不同實體)和它們之間關係的文章。那裏的帖子和它的細節在不同的表格中。但正如我所看到的,郵政細節是一個可嵌入的部分,因爲它不能在沒有「父」郵政的情況下使用。那麼將其分離到另一個表中的邏輯是什麼?嵌入與一對多
請給我一個更清楚的解釋何時使用哪一個?
我曾在Dzone看過關於發佈和發佈細節(兩個不同實體)和它們之間關係的文章。那裏的帖子和它的細節在不同的表格中。但正如我所看到的,郵政細節是一個可嵌入的部分,因爲它不能在沒有「父」郵政的情況下使用。那麼將其分離到另一個表中的邏輯是什麼?嵌入與一對多
請給我一個更清楚的解釋何時使用哪一個?
可嵌入類表示其父類的狀態。因此,舉個例子,一個StackOverflow POST有一個不變的ID,用在一個不可破解的URL中用於共享http://stackoverflow.com/q/44017535/146325
。還有一系列屬於標量屬性的其他屬性(狀態,投票等)。當帖子被編輯時,我們有各種版本的文本(這些文本被保存並且被具有足夠的代表的人可見)。這些是你的發佈詳情。
「在另一個表中分隔它的邏輯是什麼?」
因爲在不同的表中保存不同的東西是關係數據庫所做的。表示此數據模型的標準方式是父表POST和具有通過外鍵強制實施的定義關係的子表POST_DETAIL。
Embeddable是一個來自面向對象編程的概念。 Oracle不支持數據庫中的對象關係構造。因此,可以定義一個POST_DETAIL類型並創建一個POST表,其中有一個列聲明爲該類型的嵌套表。但是,這將是一個糟糕的設計,原因有兩個:
[oracle]
標籤找到所有帖子是多麼容易?這是面向對象設計和關係設計的區別。
面向對象具有強大的層次結構:一切都屬於某種東西,而獲取細節的方式是通過父項。這種方法在處理事件的單個實例時運行良好,因此適用於UI設計。
關係優先級通用性:相同類型的所有內容都與其他事物的鏈接組合在一起。這種方法適用於處理各種事情,因此適用於數據管理任務(您是否希望查找在柏林工作的所有員工或工程師是誰,還是由ELLIOTT管理?)
「給我一個更清楚的解釋何時使用哪一個」
總是將數據關係地存儲在單獨的表中。如果這樣做合理,則使用面向對象模式構建API。
只是一個迂腐的小竅門。 '關係'實際上沒有優先關係。 FK關係是一個笨重的工作。 RDBMS中的'關係'指的是這樣一個事實:特定表中的所有行都是相關的,因爲它們是相同類型的事物,而不是與其他表中的其他行相關。除此之外 - 很好的答案。 – BriteSponge
@BriteSponge - 感謝您的反饋。我忙着完成這個任務,並沒有正確閱讀。 – APC
你可以在這裏提供更多的上下文嗎?事實上,可能不需要兩張表格,但是這個決定很可能是出於一個合理的原因,顯示一些數據可能會解釋。 –
請添加帖子的鏈接 – Dwhitz
將結構化數據與其父行一起存儲可能是一個好的概念,在這種情況下,這些數據是*一個信息*。在[此鏈接](http://stackoverflow.com/a/43495014/5089204)我回答了問題*我應該什麼時候保存JSON **原樣**?*這不完全相同,但它是非常有關。可能會很有趣... – Shnugo