在mysql中实现多对多的关系

我有两张桌子

1.Rectangle(rectId,xPos,yPos,height,width)

2.Scale(scaleId,someothercols ……)

现在,矩形中的每个列都可以具有与之关联的“0到1”比例.

即xPos可以有比例,yPos可以有比例等等.因此,通常一个矩形可以有多个刻度.

此外,所有上述列也可以没有比例参考,在这种情况下,它们将具有静态值,即xPos = 50,yPos = 60等等.

缩放也可以由多个矩形引用.

在sql中实现它的最佳方法是什么

我想到的方法是使用带有rect_column属性e​​xg的联结表Rectangle_scale:

Rectangle_scale

| rectScaleId | rectId      | scaleId      | rect_col(string)|
|:----------- |------------:|:------------:|---------------- | 
| 1           |      1      |     2        |  Xpos           |
| 2           |      1      |     3        |  Ypos           | 
| 3           |      2      |     2        |  Height         | 

这是正确的方法吗?我还需要rectScaleId col,还是应该使用rectId和scaleId作为复合主键

另外,提到的与问题没有直接关系的东西,我使用的Laravel 5.2框架具有​​雄辩,不一定是必需的,但是坚持Laravel雄辩的限制的解决方案会很好.

最佳答案 如你所说,实现多对多关系需要一个连接表.

所以根据你的问题,这种关系基本上是在矩形表和比例表之间.

我们需要表格的属性:

>任何现有的矩形都可以根据需要引用每个比例
>每个矩形都可以与多个比例相关联

这可以通过创建表来完成,如下所示:

create table rectangle (
  rectID int primary key auto_increment,
  xPos int,
  yPos int, 
  height int,
  width int)ENGINE = Innodb;

create table scale (
  scaleID int primary key auto_increment,
  descr text )ENGINE = Innodb;

create table rect_scale (
  scale int not null,
  rect int ,
  rect_col varchar(100),
  primary key (scale,rect),
  foreign key(scale) references scale(scaleID),
  foreign key(rect) references rectangle(rectID)     
)ENGINE = Innodb;

我还在SQLFiddle:here上创建了一个演示

点赞