如何存储类I的矩阵使其成为数据库?

时间:2015-04-05 10:51:24

标签: c#

我已经制作了两个名为Material类的类有13个变量 和bill类有这样的材料矩阵

class Bill
{
     int id;
     int company_id;
     int bringer_id;
     string date;
     List<Material> items;           
}

现在如何将数据的矩阵存储在数据库的账单表中

1 个答案:

答案 0 :(得分:0)

由于票据可以包含多于一种材料,因此票据和材料之间的关系是1 - > N,一对多。话虽这么说,你应该在材料和账单之间创建一个表格来存储这种关系。很明显,这不能存储在账单表中。因此,您必须创建一个表格,以便为每个账单存储它的材料。

例如,假设我们拥有id = 1023的账单以及具有ID为17,456和678的材料与该账单相关联。然后你应该在这个表中插入三条记录。

------------------------------
Id  |  BillId  |  MaterialId
------------------------------
..  |  ......  |  ..........
123 |  1023    |  178
124 |  1023    |  456
125 |  1023    |  678

表定义将是这样的(在TSQL中):

CREATE TABLE BillMaterial
(
    Id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
    BillId INT NOT NULL,
    MaterialId INT NOT NULL,
);

此外,我们必须声明两个约束。首先,我们应该声明BillId是指向Bill表的外键。然后,我们应该声明MaterialId将是指向Material的键的外键。

  

如何将物料的矩阵存储在票据表中   数据库

就个人而言,我会选择MERGE选项,以便在事务中进行多次插入。为此,我们应该创建一个存储过程,该过程将采用一个参数。此参数将是数据表。该数据表将存储所有账单材料对。这种实现需要做更多的工作,但我认为与其他替代方案相比,它更加优化,即对每对账单和材料进行数据库往返并执行插入语句。后者可以使用像实体框架这样的ORM来避免,但我不确定这是否可行。你必须搜索它。