C# 在一个表中插入多行还是在多个表中分别插入行?

C# 在一个表中插入多行还是在多个表中分别插入行?,c#,database,sql-server-ce,C#,Database,Sql Server Ce,我有两个数据库表(SQLCE)。一张教师表和一张班级表。这两个表具有一对多关系,其中一名教师有多个班级(即,班级有一个外键教师id)。在运行时通过C#代码插入(或生成)教师(行)的数量,以便 以下哪项在插入和选择中更快 每次插入新教师时,都会创建一个新的班级表(例如Class_teacher001),以存储教师拥有的任何班级。在这种情况下,每个类表不必太大,也不需要外键,因为表名可以标识自己。但是将有一个教师表和许多班级表 只有一张教师桌和一张班级桌。每个班级行都有一个外键指向教师表。只有一张课

我有两个数据库表(SQLCE)。一张教师表和一张班级表。这两个表具有一对多关系,其中一名教师有多个班级(即,班级有一个外键教师id)。在运行时通过C#代码插入(或生成)教师(行)的数量,以便

以下哪项在插入和选择中更快

  • 每次插入新教师时,都会创建一个新的班级表(例如Class_teacher001),以存储教师拥有的任何班级。在这种情况下,每个类表不必太大,也不需要外键,因为表名可以标识自己。但是将有一个教师表和许多班级表

  • 只有一张教师桌和一张班级桌。每个班级行都有一个外键指向教师表。只有一张课桌,但会很长。我担心搜索和阅读会很慢

  • 不管哪种方法更快,(2)都是可行的……只需创建索引来支持您的搜索。几乎所有关系数据库都是这样使用的


    维护选项(1)的噩梦让我不寒而栗,不管哪一个更快,(2)是一条路……只需创建索引来支持搜索。几乎所有关系数据库都是这样使用的


    维护选项(1)的噩梦让我不寒而栗

    好的,从哪里开始。首先,教师和班级之间的关系可能是多对多的,但正如您所描述的,至少是一对多的关系

    第一种选择绝对是错误的。永远不要动态创建表。第二个选择是如何处理这类事情。数据库功能强大,由非常聪明的人(通常)编写,可以处理比给定学校所有学生多得多的行


    只要对表进行适当的索引,它们就可以轻松支持数亿条记录。

    好的,从哪里开始。首先,教师和班级之间的关系可能是多对多的,但正如您所描述的,至少是一对多的关系

    第一种选择绝对是错误的。永远不要动态创建表。第二个选择是如何处理这类事情。数据库功能强大,由非常聪明的人(通常)编写,可以处理比给定学校所有学生多得多的行


    只要您对表进行适当的索引,它们就可以轻松支持数亿条记录。

    我也同意米奇·麦特的观点。因为当你创建一个索引时,你的表会根据我们的老师创建的组合索引(老师Id,班级Id)进行物理排序。
    虽然这将有助于快速检索选定状态。

    我也同意米奇·麦特的观点。因为当你创建一个索引时,你的表会根据我们的老师创建的组合索引(老师Id,班级Id)进行物理排序。
    虽然这将有助于快速检索Select Station。

    除非您已经遇到性能问题,否则我不会担心这些问题。除了行数之外,还有许多因素可能会导致性能问题,因此应根据它们是什么来进行不同的处理。与行数相比,您更需要担心表中影响性能的列数。还有到数据库的并发连接数。表中的一百万行并不是那么多,是其他两项加上那么多行会使数据库变慢。您应该使用第二个选项。

    除非您已经遇到性能问题,否则我不会担心这些问题。除了行数之外,还有许多因素可能会导致性能问题,因此应根据它们是什么来进行不同的处理。与行数相比,您更需要担心表中影响性能的列数。还有到数据库的并发连接数。表中的一百万行并不是那么多,是其他两项加上那么多行会使数据库变慢。您应该使用第二个选项。

    当然可以。做第一个选择将导致无穷无尽的问题。如果您真的担心表的长度,请创建一个存档表,并在不再引用旧记录时将其移到另一个位置。做第一个选择将导致无穷无尽的问题。如果您真的担心表的长度,请创建一个存档表,并在不再引用旧记录时将其移动。选择1。这是不可能的,因为您有更多的教师和班级,整个数据库的表数将“太大”,这不适合sql server ce。虽然我使用SQL Server,但我永远不会选择1.:)选择一。这是不可能的,因为您有更多的教师和班级,整个数据库的表数将“太大”,这不适合sql server ce。虽然我使用SQL Server,但我永远不会选择1.:)我听说动态创建表是一件“糟糕”的事情,但从来没有人能解释为什么它是糟糕的。动态创建表只是另一个SQL查询。有人知道吗?这会导致无法维护的混乱。我听说动态创建表是一件“糟糕”的事情,但从来没有人能解释为什么它不好。动态创建表只是另一个SQL查询。谁知道呢?这会导致无法维护的混乱。