Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite/C#:设计一个实体,它是许多父实体的子实体_C#_Sqlite_Entity Relationship - Fatal编程技术网

SQLite/C#:设计一个实体,它是许多父实体的子实体

SQLite/C#:设计一个实体,它是许多父实体的子实体,c#,sqlite,entity-relationship,C#,Sqlite,Entity Relationship,我有这些关系: 1 Period has N Documents 1 Pupil has N Documents 1 Report has N Documents 这些是我的C#实体: class Period { public int PeriodId {get;set;} public List<Document> Documents {get;private set;} } class Pupil { public int PupilId {get;

我有这些关系:

1 Period has N Documents
1 Pupil has N Documents
1 Report has N Documents
这些是我的C#实体:

class Period
{
   public int PeriodId {get;set;}   
   public List<Document> Documents {get;private set;}
}

class Pupil
{
   public int PupilId {get;set;}   
   public List<Document> Documents {get;private set;}
}

class Period
{
   public int ReportId {get;set;}  
   public List<Document> Documents {get;private set;} 

}

class Document
{
   public int DocumentId {get;set;}

   // ??? 
   public int PeriodId {get;set;}
   public int PupilId {get;set;}
   public int ReportId {get;set;} 

   // ??? OR just a general Foreign-Key Id like
   public int Id_FK {get;set;}
}
上课时间
{
公共整型周期ID{get;set;}
公共列表文档{get;private set;}
}
班级学生
{
公共int PupilId{get;set;}
公共列表文档{get;private set;}
}
上课时间
{
public int ReportId{get;set;}
公共列表文档{get;private set;}
}
类文档
{
public int DocumentId{get;set;}
// ??? 
公共整型周期ID{get;set;}
公共int PupilId{get;set;}
public int ReportId{get;set;}
//??或者只是一个通用外键Id,如
公共int Id_FK{get;set;}
}
问题是:

当我有一个periodid33的文档时,我也可能有一个pupilid33,因为两个表都使用主键/自动增量。因此可能有一个瞳孔和一个周期Id为33。现在在两个表上进行内部联接时,我将从sqlite查询返回两个文档,尽管我应该只得到一个


您将如何解决这个问题?

您应该创建三个文档(例如,期间文档、学生文档和报告文档)。这可能比必要的更一般(一个文档也可能属于多个期间),但更正常。

您应该创建三个文档(例如,期间文档、学生文档和报告文档)。这可能比必要的更一般(一个文档也可能属于多个期间),但它更正常。

首先,为SQLite定义ERD,然后正确无误,然后可以在C#中进行对象关系映射。您有四个主要实体,每个实体都需要SQLite中的一个表:文档、学生、期间和报告。然后,您需要一种方式来表达这样一个事实,即这三个表中的每个实体(行)都可以与一个或多个文档相关联。正如Martin所说,这是使用“连接”即链接表完成的

现在,在C#中,如果希望有一个名为Document的非规范化对象,可以执行以下操作:

class Document
{
   public int DocumentId {get;set;}

   // ??? 
   public int PeriodId {get;set;}
   public int PupilId {get;set;}
   public int ReportId {get;set;} 

   // ??? OR just a general Foreign-Key Id like
  public int Id_FK {get;set;}
}

仅当文档可以与一个且仅一个期间、一个且仅一个学生以及一个且仅一个报告关联时。如果一个文档可以链接到这些实体中的多个,那么文档类的这些属性必须允许多个值,即它们必须是数组或列表。

首先,为SQLite定义ERD,然后正确无误,然后可以在C#中进行对象关系映射。您有四个主要实体,每个实体都需要SQLite中的一个表:文档、学生、期间和报告。然后,您需要一种方式来表达这样一个事实,即这三个表中的每个实体(行)都可以与一个或多个文档相关联。正如Martin所说,这是使用“连接”即链接表完成的

现在,在C#中,如果希望有一个名为Document的非规范化对象,可以执行以下操作:

class Document
{
   public int DocumentId {get;set;}

   // ??? 
   public int PeriodId {get;set;}
   public int PupilId {get;set;}
   public int ReportId {get;set;} 

   // ??? OR just a general Foreign-Key Id like
  public int Id_FK {get;set;}
}

仅当文档可以与一个且仅一个期间、一个且仅一个学生以及一个且仅一个报告关联时。如果一个文档可以链接到多个实体,则文档类的这些属性必须允许多个值,即它们必须是数组或列表。

这就是场景:用户只能向一个实体添加DocId为33的文档“excel工作表”。如果他将同一文档“excel工作表”添加到另一个实体,则另一个文档ID为34。这就是场景:用户只能将文档ID为33的文档“excel工作表”添加到一个实体。如果他将同一个文档“excel工作表”添加到另一个实体,那就是另一个文档ID,如34。实际上,单个文档只能属于一个期间。无法将同一文档id添加到另一个实体。我甚至会说,这是不必要的,因为一个时期有一个独特的内容。我不认为我需要两次添加相同的“数学表”,因为我一年不教两次相同的课程。这是没有道理的。实际上,一份文件只能属于一个时期。无法将同一文档id添加到另一个实体。我甚至会说,这是不必要的,因为一个时期有一个独特的内容。我不认为我需要两次添加相同的“数学表”,因为我一年不教两次相同的课程。这是没有道理的。