2017-02-24 26 views
0

C#用於麪包店鏈的項目,用於記錄包括配料和實際配方等在內的所有產品。似乎對於像我這樣的人完成了大量SQL而言,自由形式有點過分。我腦海中浮現了MongoDB。 啓動了典型的Type,數據庫接口和Repository類,然後我意識到我習慣於將所有內容映射到Type類中以定義每個屬性/列。我選擇MongoDB的原因是無法確定究竟有多少列。有時候他們會按照一定的順序和項目寫下書籍,而其他時間他們只是隨意寫成完全自由的形式。在Type中預先定義它們是不可能的。當然,解決方法是組成20個屬性/列,因爲它們永遠不會使用這麼多。我知道MongoDB也有架構。但是,這種方式只能回溯到通常的固定模式SQL。如何爲MongoDB定義類型

如果MongoDB的仍然是數據庫的選擇,C#可能有鍵入以下選項:

  1. 捕捉一切成一個大的字符串(品牌和配方)
Bakery{ 
int UserId, 
string UserName, 
Datetime makeTime, 
string make, 
string recipe 
} 
  1. 有點更有條理,缺點是它不能處理非對收集,例如水平3+字段。
Bakery{ 
    int UserId, 
    string UserName, 
    Datetime makeTime, 
    iCollection<make> makes, 
    iCollection<recipe> recipes 
    } 

public class make 
{ 
string fieldName, 
string actualValue 
} 
public class recipe 
{ 
string ingredientName, 
string dose 
} 
  • 預定義多達每行/文件20個字段,我寧願回去SQL。
  • Bakery{ 
        int UserId, 
        string UserName, 
        Datetime makeTime, 
        iCollection<make> makes, 
        iCollection<recipe> recipes 
        } 
    
    public class make 
    { 
    string fieldName1, string actualValue1, 
    ... 
    string fieldName20, string actualValue20 
    } 
    public class recipe 
    { 
    string ingredientName1, string dose1, 
    ... 
    string ingredientName20, string dose20 
    } 
    

    必須能夠存在,如果要查詢的項目和值。需要一些專家的意見。謝謝。

    +0

    據我瞭解mongoDb的東西,你使用你的第三部分,而不是使用fieldname1 - fieldname20只是使用另一個列表。因爲它像JSON-Objects一樣保存得很多,所以您不會在行和列方案中綁定到2維對象。如果您的課程由一個列表組成,其中每個字段由字段和值成員組成,則可以將靈活數量的字段存儲到數據庫中。 – Sebi

    +0

    @塞比好點。關鍵是讓它垂直而不是水平。我如何處理相關但不成對的事物?例如,配方,劑量和溫度。 – Jeb50

    +0

    我會考慮它完全面向對象。建立一個不錯的C#對象結構。稍後你將它序列化爲mongodb。但這只是我的觀點,我從來沒有嘗試過。爲了保持關係,您需要存儲我認爲的Mongo文檔的Id字段。 https://docs.mongodb.com/ecosystem/drivers/csharp/ – Sebi

    回答

    1

    您可以簡單地使您的makesreceiptsDictionary<string,string>

    請檢查this anwser爲例。

    +0

    這是2013年的一篇文章。你知道List是否會被支持嗎?原因在於它們如此習慣於自由形式,人類從背景中獲得它,不會因爲它們的獨特性而感到困惑,數字的範圍從不重疊。例如,他們寫道:品牌A,糖,2(暗示勺子),300(暗示溫度),20(暗示分鐘)。你可以告訴他們沒有鑰匙。因爲「糖」已經成爲整個文件的關鍵。在「糖」添加數據輸入開銷之後,要求字段的單位/劑量/標籤。 – Jeb50

    +0

    即使它是2013年發佈,它不會使其錯誤或無效。列表支持。您始終可以使該屬性成爲字符串列表以實現此目的。 – user3682091

    +0

    Got ** ExtraElements類型的成員必須是BsonDocument,或者在將其更改爲Dictionary from Dictionary時實現IDictionary **。 – Jeb50

    相關問題