Sql 在具有一对多关系的两个表之间映射的最佳方法是什么?

Sql 在具有一对多关系的两个表之间映射的最佳方法是什么?,sql,sql-server,database-design,Sql,Sql Server,Database Design,最好创建第三个表,将每个表的主键作为外键?还是将外键添加到第一个表? 例如,学生表和项目表每个项目都有许多学生。如果确实有一对多关系,则向第一个表添加外键。例如: create table students ( . . . projectId int not null references project(projectId) ); notnull使该值为1-many。在大多数情况下,您可能需要0/1-many。如果是,则删除非空约束 如果学生可以从事多个项目,您只会引入第

最好创建第三个表,将每个表的主键作为外键?还是将外键添加到第一个表?
例如,学生表和项目表每个项目都有许多学生。

如果确实有一对多关系,则向第一个表添加外键。例如:

create table students (
     . . . 
    projectId int not null references project(projectId)
);
notnull
使该值为1-many。在大多数情况下,您可能需要0/1-many。如果是,则删除
非空
约束

如果学生可以从事多个项目,您只会引入第三个表(称为“关联表”、“连接表”、“交叉表”和其他名称)


请注意,如果学生项目关系随时间变化,则可能需要第三个表。在任何给定的时间,一个学生都在处理一个项目,但随着时间的推移,如果该学生可以处理多个项目。

如果您确实有一对多的关系,则可以向第一个表中添加外键。例如:

create table students (
     . . . 
    projectId int not null references project(projectId)
);
notnull
使该值为1-many。在大多数情况下,您可能需要0/1-many。如果是,则删除
非空
约束

如果学生可以从事多个项目,您只会引入第三个表(称为“关联表”、“连接表”、“交叉表”和其他名称)


请注意,如果学生项目关系随时间变化,则可能需要第三个表。在任何给定的时间,一个学生都在做一个项目,但随着时间的推移,如果学生可以做多个项目。

如果是一对多,只需在学生表中添加新列作为外键(projectd)

如果是一对多,只需在学生表中添加新列作为外键(projectd)

如果是一对多,则不需要第三个表,如果是多对多,你会的。您只需在projects表中为student表中的StudentID添加一个FK,另一个副本的可能副本:如果是一对多,则不需要第三个表,如果是多对多,则需要。您只需在项目表中为学生表中的StudentID添加一个FK,另一个副本的可能副本:thnaks@Gordan否,任何学生都不能处理多个项目thnaks@Gordan否,任何学生都不能处理多个项目