MySQL中的一对多关系 - 如何构建模型?

时间:2013-06-11 13:01:30

标签: mysql relational-database

我有两张桌子:

1)区域 2)地图

每个区域至少应有一个地图,但也可以有多个地图。

一张地图只能属于一个区域。

如何在MySQL中构建它?

3 个答案:

答案 0 :(得分:11)

create table Area(id int primary key auto_increment, name varchar(100));

create table Map(id int primary key auto_increment, 
                 area_id int not null,
                 name varchar(100),
                 foreign key (area_id) references area(id));

SqlFiddle

每个Map必须有Area,因为area_id不为空(并且Foreign key上是Area

但是你不可能(而且不希望)每个区域都有“至少一张地图”。

有一天,你必须创建一个Area。它目前不会有任何Map。 或者进行“常规”检查以查看没有任何地图的区域。

删除Area时,如果Map没有更多关联Map,则可能需要删除。

答案 1 :(得分:9)

在Map中添加引用Area的主键的外键。这将强制地图和区域之间的一对多关系。

至于每个区域至少执行一张地图(如果有必要),这篇文章here中有一些想法。其中一个更简单的解决方案是创建一个仅显示包含地图的区域的视图:

CREATE VIEW viewAreas AS
SELECT * 
FROM Areas, Maps
WHERE Areas.ID = Maps.AreaID;

这样,您可以创建一个区域,然后向其添加地图。您还可以将映射中的外键强制为NOT NULL,因此映射必须始终具有区域。

答案 2 :(得分:2)

Map和Area各有一个表,Map上的外键链接到Area。