2

行建模與EAV(實體 - 屬性 - 值)之間的主要區別是什麼?
我認爲EAV是行建模的子集,但我不能說明主要差異。
如果可能,請在您的答案中使用參考。行建模與EAV之間的區別

+1

這是你的[行建模(http://www.ncbi.nlm.nih.gov/pmc/articles/是什麼意思PMC353023 /)? –

+0

是的,這是一個很好的定義。 – nsbm

+0

他們對我來說似乎是一回事。是什麼讓你相信'Row-Modelling'不僅僅是某個EAV的本土名稱? –

回答

2

好問題。

the Wikipedia article

行建模和EAV之間的差異是:

  • 一個行建模表是事實同質它描述:一個行項目表描述只產品出售。相比之下,EAV表幾乎包含任何類型的事實。
  • 行模型表中值列的數據類型是根據它記錄的事實的性質預先確定的。相比之下,在EAV表中,特定行中值的概念數據類型取決於該行中的屬性。

因此,這裏是我採取的是:

  • 排造型

    create table line_items (
        id int primary key, 
        sale_id int, 
        foreign key sale_id references sale(id), 
        product_name varchar(50), -- this could also be a foreign key 
        price decimal(10, 2) 
    ); 
    
    • 這有某種類型的安全性:price不能一些垃圾串

    • ,我們把這個表的唯一的東西是行項目

    • 對我來說,這聽起來就像一個正常的1:一對多的關係(但我不知道,所以不要可以引用我這句話)

  • 實體 - 屬性 - 值

    create table my_eav (
        entity_id int, 
        foreign key (entity_id) references entity(id), 
        attribute varchar(50), 
        value varchar(50), 
        primary key (entity_id, attribute) 
    ); 
    
    • 的值存儲爲varchar秒 - 但他們可以是數字,字符串,時間等

    • 各種可以存儲的數據 - 鞋的大小,飛機重量,回家的次數運行貝比魯斯在1926年


文章接着說打:

,你將需要超越標準行建模,以EAV的情況列舉如下:

  • 個體屬性的數據類型各不相同(如臨牀發現所見)。
  • 數據的種類很多,生長或波動,但實例(記錄/行)每個類別內的數量是非常小的。在這裏,與傳統的造型,數據庫的實體關係圖可能有數百個表:包含數千個/百萬行的表/實例突出視覺到相同的程度會有很大的幾行。後者是轉換爲EAV表示的候選對象。

所以,如果你有很多這樣的1:許多關係,你想爲每個1個表,行建模需要?而EAV將允許您結合(部分或全部),這些表到1

相關問題