数据结构问题

时间:2011-08-12 18:52:50

标签: asp.net-mvc-3 entity-relationship

处理这种情况的最佳方法是什么?

我有一个客户模型(表)包含客户的联系信息 我有Prospect Model(表)包含非客户的商店访客的联系信息 当客户或Prospect访问商店时,我有一个机会模型(表)。

在我看来,我希望产生一个新的机会。机会只能包含1个客户关联或1个潜在客户关联,但不能包含两者。

在我的机会模型中,我目前将客户和潜在客户视为可以为空的外国Id和导航属性。我也有一个ICollection<>对于客户和机会模型的前景。

这是处理条件关联的正确方法吗?

谈到这个观点,我一直坚持如何建立客户或潜在客户协会?

1 个答案:

答案 0 :(得分:1)

我是一名计算机科学专业的学生,​​这是我对数据库关系的理解:

由于您有两种类型的“人员” - 客户 - 和潜在客户 - 您可能会有一个名为“人”的表。在Person表中,将存储两个实体之间的任何公共数据(FirstName,LastName,Address1,Address2,City,State,Zip等...)。

要表明Person是Prospect,您将拥有一个Prospect表,该表将有一个PersonId链接到person表。您可以在此表中存储有关潜在客户的更多特定属性。

同样适用于客户 - 您将拥有一个Customer表 - 它将有一个PersonId列链接到Person表,以及Customer实体的任何特定属性。

现在您有一个数据库,您可以在其中派生其他实体...说一个员工实体>你有你的基础人实体开始。您的Employee表将链接回它,并且还有其他自定义列用于员工特定数据。

这有意义吗?

或者我可能会这样做错了:)。如果我错了,请纠正我,因为我还是学生。

我认为你被困了,因为你现在在“机会”记录(客户或潜在客户)上有两个字段,其中一个必须为空。使用我提出的模型,您的机会将链接到一个人,您可以在其中定义限制说...员工机会(实际上可能不是一个坏主意)的自定义业务规则。

对于机会模型中引用的人,它不是ICollection(因为您特别说机会只能有一个人)。它只是一个单一的类,如:

private virtual Person Person { get; set; }

编辑:如果您不想重组整个数据库,您可以只有一个下拉菜单,询问这是什么类型的商机(客户或潜在客户)。根据选择,您可以在商机表中添加外键以链接到[客户或潜在客户]。