2013-04-03 23 views
0

我有一個對象,其字段我想存儲在數據庫中。我將使用SQL Server Compact Edition(使用Visual C#Express 2010)。爲了記錄,我對數據庫編程(和一般數據庫)相當陌生。這個程序將每天用於閱讀電子郵件,處理內部訂單,存儲它們,並在必要時訪問它們以幫助完成訂單。訂單列表將變得非常大以存儲在列表中,寫入文件,從文件創建列表等。問題是每個訂單都包含所購買物品的列表。我知道我可以用二進制或XML序列化列表,並將該數據用作字段。但是,這阻止了我根據該列表進行搜索/選擇。例如,如果我想根據其中的物品來查找訂單,或者查看特定物品已被購買了多少次。由於這個列表的大小是任意的,我不能只創建一堆字段,只填寫我需要的字段(在我看來,這是一個壞主意)。如何將List <>作爲字段存儲在數據庫中? - C#(SQL Server精簡版)

寫這篇文章的時候我意識到了一個錯誤。如果我再次序列化列表,我可以比較序列化的數據以再次找到相同的列表(儘管這假定每次都以相同的方式對相同的數據進行序列化)。但是,我仍然無法找到任何特定的項目。

那麼,有沒有什麼辦法來存儲項目列表,固定數量的字段(最好是1),仍然能夠用查詢搜索其內容(我很可能會使用LINQ)?

編輯: 爲了解決我到目前爲止:首先,謝謝!我開始拼湊我必須做的事情,但我不在那裏。共識似乎是爲每一組項目設置一個表格。這是否意味着我每個月都會創建數千張表格?

重新閱讀我的問題後,我意識到我必須更清楚。隨着訂單進入,我解析數據並將其存儲在Order對象中,該對象由客戶信息和項目列表組成。下面是我想要存儲的簡化版本:

class Order{ 
    private DateTime date; 
    private String orderNumber; 
    private String buyerName; 
    private List<Item> items; 
    private String address; 
} 

class Item{ 
    private String itemCode; 
    private String description; 
    private int quantity; 
} 

所以我會創造我創建的每個列表中的一個新表,還是我失去了一些東西?

+1

請發佈您迄今爲止編寫的代碼。一些白癡打破了我的水晶球:( – Brian

+0

是否有一個令人信服的理由,你不是建立一個相關的一對多表中的項目? –

+0

@MichaelPerrenoud是的,一個偉大的!我不知道那是什麼 – Fractalife

回答

5

更新: 這可能是一個一對多的關係,一個有用的參考,如果你是新來的主題(尤其是檢查出的第二個也是最upvoted答案):Create a one to many relationship using SQL Server

你會想在數據庫中爲您的訂單項創建新表,然後創建與訂單表的外鍵關係。這將是一對多的關係。有些事情像以下 - 顯然你需要創建一個FK關係,但你得到的主旨。

現有

CREATE TABLE Order (
    OrderID INT, 
    PONumber VARCHAR, 
    ItemsList VARCHAR 
) 

CREATE TABLE Order (
    OrderID INT, 
    PONumber VARCHAR 
) 

CREATE TABLE LineItem(
    LineItemID INT, 
    Description VARCHAR, 
    Quantity INT, 
    SequenceNumber INT, 
    OrderID INT -- <--- Important one here 
) 

請注意,如果你想創建只是一個簡單的查找,這種關係會走另一條路。

+0

我很確定您已經例如,你有一個帶有許多'Items'的'Order',因此'Items'表中包含一個'OrderID',在這裏,你有一個FK來表示類似查詢表的東西。 –

+0

我想我明白你的意思了,措辭很尷尬,我會相應更新 – wilsjd

+0

謝謝,我花了一分鐘,但我明白你在說什麼,我把所有的項目都寫到他們自己的記錄中,當我想要t o將訂單放回到對象中,我只需選擇具有相應訂單ID的項目。仍然不知道FK是什麼,但我想我會弄明白。編輯:外鍵。這將是OrderID。 – Fractalife

0

而不是將列表存儲爲字段,您可以創建一個單獨的表來保存它的項目。並且此ListTable中的記錄將有一個字段指向您的原始表中的記錄ID。這樣你可以在之後寫出各種查詢。

0

這可以通過多種方式解決,但是如果您希望能夠直接查詢數據,則應使用單獨的表重新設計數據庫,並在其中存儲具有參考ID的列表數據。畢竟,數據庫都是關於數據列表的。

相關問題