使用SQL m:n关系进行查询

时间:2016-10-17 19:32:14

标签: sql database database-design entity-relationship

我对sql中的多对多关系有一个快速的问题。 所以理论上我理解如果ER模型中的2个实体之间有M:N关系,我们必须将它分成2 1:N关系,并包含一个交集/查找表,该表具有来自两者的复合主键。父表。但是,我的问题是,除了复合主键之外,是否可以在复合表中添加任何其他列,这些列不在2个父表中的任何一个中? (除了intersectionTableId,table1ID,table2ID)一个4rth列,它是全新的,不在2个父表中的任何一个中?请告诉我。

2 个答案:

答案 0 :(得分:3)

总之 - 是的。通常的做法是表示两个实体之间关系的属性。

例如,考虑您有一个数据库,存储他们喜欢的人员和运动队的详细信息:

CREATE TABLE person (
    id INT PRIMARY KEY,
    first_name VARCHAR(10),
    last_name VARCHAR(10)
);

CREATE TABLE team (
    id INT PRIMARY KEY,
    name VARCHAR(10)
);

一个人可能喜欢多个团队,这是您经典的M:N关系表。但是,您也可以向此实体添加一些细节,例如一个人何时开始喜欢团队:

CREATE TABLE fandom (
    person_id INT NOT NULL REFERENCES person(id),    
    team_id INT NOT NULL REFERENCES team(id),
    fandom_started DATE,
    PRIMARY KEY (person_id, team_id)
);

答案 1 :(得分:0)

是的,你可以通过明确地自己建模“关系”表来做到这一点(就像你的其他实体一样)。

以下是关于这个问题的一些帖子。

Create code first, many to many, with additional fields in association table

Entity Framework CodeFirst many to many relationship with additional information