代码之家  ›  专栏  ›  技术社区  ›  OddBeck

哪种数据库设计更好?为什么?

  •  -1
  • OddBeck  · 技术社区  · 7 年前

    如果您有两个表“Checklist”和“ChecklistItems”,其中每个ChecklistItems将恰好属于一个Checklist。

    您希望外键引用“ChecklistItems”表中的“Checklist”,还是创建一个单独的表来定义检查表和项目之间的连接?

    示例:

    class Checklist {
      public int ID; // Primary Key
      public String Description;
    }
    
    class ChecklistItem {
      public int ID; // Primary Key
      public String Description;
      public int ChecklistID; // Foreign key
    }
    

    或:

    class Checklist {
      public int ID; // Primary Key
      public String Description;
    }
    
    class ChecklistItem {
      public int ID; // Primary Key
      public String Description;
    }
    
    class ChecklistAndChecklistItem {
      public int ChecklistID; //  primary key 1 AND foreign Key constraint
      public String ChecklistItemID //  primary key 2 AND Foreign Key constraint;
    

    }

    你为什么要这样做?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Robby Cornelissen    7 年前

    第一个。这是一个标准的一对多关系,因此应该这样建模。

    第二种方法是使用关联表,由于以下几个原因,其效果较差:

    • 额外的表只会占用额外的磁盘/内存空间。
    • 您的联接查询会变慢,因为您必须联接3个表,而不是2个表。
    • 您必须在关联表上指定其他约束,以表示关系的一对多性质。