18

我有两张桌子:

1) 区域 2) 地图

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

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

如何在 MySQL 中构建它?

4

3 回答 3

14
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不是 null (并且是一个Foreign keyon Area

但是您将无法(并且不希望)为每个区域拥有“至少一张地图”。

有一天,您必须创建一个Area. 而且它现在没有任何东西Map。或者进行“定期”检查以查看没有任何地图的区域。

Area当您Map删除一个Map.

于 2013-06-11T13:10:09.717 回答
9

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

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

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

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

于 2013-06-11T13:21:50.857 回答
2

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

于 2013-06-11T13:05:39.127 回答