首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server / EF -数据库设计

Server / EF -数据库设计
EN

Stack Overflow用户
提问于 2012-09-05 16:25:23
回答 2查看 194关注 0票数 0

我现在要开始一个新的项目来帮助投诉。我已经把所有的领域都算出来了。但这样做,我意识到我需要超过一种类型的抱怨。他们是客户投诉,供应商投诉或缺陷投诉。它们共享许多相同的字段,但略有不同,因此我不确定如何在Server数据库和/或使用EF中设计这些字段。该应用程序将是一个使用ASP.NET MVC 4的C#应用程序,因此我可以首先利用代码,但正如我所说的,我不确定如何设计这些实体:

所有3种投诉类型共有以下各栏:

代码语言:javascript
复制
ComplaintType (int), Department (int), 
Code (int), DefectReference (string), Cause (int)

客户投诉和供应商投诉共享以下专栏:

代码语言:javascript
复制
ComplaintText (string), Orders (collection), Rectification (string)

以下是客户投诉所特有的专栏:

代码语言:javascript
复制
AccountNumber (string), CustomerName (string)

最后,以下是供应商投诉所特有的领域:

代码语言:javascript
复制
SupplierNumber (string), SupplierName (string)

所以我的问题是:

  1. 我将如何着手创建我的模型,以便首先与EF代码一起使用
  2. 我将如何使用SQL Server来设计它?

谢谢

注意:还有更多的列(ID等)但为了这个例子,我把它缩短了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-05 16:35:21

有几种方法可以首先在代码中实现继承,这完全取决于您希望如何在SQL中表示表。

是否需要针对所有类型的单一投诉表,其中一些字段根据其类型保留为空?你会用每个层次的表来做这个。

您想要一个包含公共字段的主投诉表,然后是基于类的包含额外列的关系表吗?你会用每种类型表来做这个。

如果您希望每个投诉类型都有一个表,那么每个表中都表示有公共字段吗?那是每种混凝土类型的表

就我个人而言,我可能会倾向于每种类型的表。下面是一个简短的例子:

代码语言:javascript
复制
public abstract class Complaint 
{
    public int ComplaintType { get; set; }
    public int Department { get; set; }
    public int Code  { get; set; }
}

[Table("CustomerComplaint")]
public class BankAccount : Complaint
{
    public string ComplaintText { get; set; }
    public string Rectification { get; set; }
}

[Table("SupplierComplaint")]
public class SupplierComplaint: Complaint
{
    public string SupplierNumber { get; set; }
    public string SupplierName { get; set; }
}
票数 2
EN

Stack Overflow用户

发布于 2012-09-05 16:35:03

是的,一般来说,EF代码优先策略是最好的选择。

您应该创建一个Complaint类,并将这个类使用(委托)到SupplierCustomerDefect类。继承层次结构可能会损害您的设计可扩展性。总是偏爱组合而不是继承。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12285820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档