1

フィールドをデータベースに保存したいオブジェクトがあります。SQL Server Compact Edition (Visual C# Express 2010 を使用) を使用します。念のために言っておきますが、私はデータベース (およびデータベース全般) を使ったプログラミングにかなり慣れていません。このプログラムは、メールを読んだり、メール内の注文を処理したり、保存したり、必要に応じてメールにアクセスして注文を完了するために毎日使用されます。注文のリストは、リストに保存したり、ファイルに書き込んだり、ファイルからリストを作成したりするには、非常に大きくなります。問題は、各注文に購入したアイテムのリストが含まれていることです。リストをバイナリまたは XML でシリアル化し、そのデータをフィールドとして使用できることを認識しています。ただし、これにより、そのリストに基づいて検索/選択できなくなります。たとえば、注文内容に基づいて注文を検索したい場合、または、特定のアイテムが購入された回数を確認します。リストは任意のサイズになるため、たくさんのフィールドを作成して必要なものだけを埋めることはできません (私の意見では、とにかく悪い考えです)。

これを書いていて、間違いに気づきました。リストを再度シリアル化すると、シリアル化されたデータを比較して、同じリストを再度見つけることができます (ただし、これは、同じデータが毎回同じ方法でシリアル化されることを前提としています)。ただし、特定のアイテムを見つけることはできません。

それで、アイテムのリストを固定数のフィールド(できれば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;
}

作成するリストごとに新しいテーブルを作成する必要がありますか、それとも何か不足していますか?

4

3 に答える 3

5

更新: これは、このテーマに慣れていない場合、1 対多の関係の参考になる可能性があります (特に、2 番目で最も支持された回答を確認してください): SQL Server を使用して 1 対多の関係を作成する

ラインアイテム用にデータベースに新しいテーブルを作成してから、注文テーブルへの外部キー関係を作成します。一対多の関係になります。次のようなもの - 明らかに 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
)

単純なルックアップだけを作成したい場合は、関係が逆になることに注意してください。

于 2013-04-03T17:05:13.360 に答える