【问题标题】:Update database n:n更新数据库 n:n
【发布时间】:2010-07-27 06:33:43
【问题描述】:

我有两个班级:

public class RichMan
{

public string ID {get;set;}
List<Car> _cars=new List<Car>();
{
    public List<Car> Cars
    {
    get
                {
                    return this._cars;
                }
                set
                {
                    this._cars = value;
                    NotifyChanged("Email");
                }

    }

}

public class Car
{
public string ID {get;set;}
}

还有 3 张桌子:

RichMan 
ID int

Cars:
ID int

and CarsOfRichmen

idcar int (FK)
idrichman (FK)

如果 Richamn 的汽车集合会改变如何在数据库中进行操作?

从 CarsOfRichmen 中删除所有记录,其中 idrichman 是我的 Richam 的 id,然后在 foreach 中将 realtions 添加到 CarsOfRichmen ?

这是个好习惯吗?

【问题讨论】:

    标签: c# sql sql-server-2005


    【解决方案1】:

    不,这不是一个好习惯。

    汽车可以有其他链接信息; Cars 的变化可以触发其他操作。

    您必须添加/删除/更新相关汽车 [EDIT] 和/或 CarsOfRichmen...

    【讨论】:

    • 当某个富人卖掉他的车时,我不想在 Table Cars 中找零钱。
    【解决方案2】:

    我知道这里至少有 3 种模式:

    1) 根据 Pascal - 分析“之前”和“之后”场景,然后根据需要将相关增量应用于链接的数据(插入、更新和删除)。

    2)按照您的建议删除链接(但不是汽车)是一种很常见的模式。但是,您应该具有某种形式的日志记录/审核功能,以便您可以重现发生的事情。

    3) 另一种常见的模式是在链接上添加日期从/日期到范围并以这种方式对其进行版本化。但是,由于链接堆积得很快,性能可能会下降。

    【讨论】:

    • 我不得不对此进行多次更改,我认为您已经涵盖了各种可能性。 (1) 通常太难了。 (2)是我通常最终得到的。 (3) 可能会使您的所有查询变得更加复杂。可以使用仅选择“活动”行并将其用作链接表的视图来实现这一点;这样就省去了查询的所有困难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多