我有两张桌子:
1) 区域 2) 地图
每个区域应至少有 1 个地图,但也可以有多个地图。
一张地图只能属于一个区域。
如何在 MySQL 中构建它?
我有两张桌子:
1) 区域 2) 地图
每个区域应至少有 1 个地图,但也可以有多个地图。
一张地图只能属于一个区域。
如何在 MySQL 中构建它?
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));
每个Map
必须有一个Area
, 因为area_id
不是 null (并且是一个Foreign key
on Area
)
但是您将无法(并且不希望)为每个区域拥有“至少一张地图”。
有一天,您必须创建一个Area
. 而且它现在没有任何东西Map
。或者进行“定期”检查以查看没有任何地图的区域。
Area
当您Map
删除一个Map
.
在 Map 中添加一个引用区域主键的外键。这将在地图和区域之间实施一对多的关系。
至于每个区域至少执行一张地图(如果有必要),这里的这篇文章中有一些想法。更简单的解决方案之一是创建一个仅显示具有地图的区域的视图:
CREATE VIEW viewAreas AS
SELECT *
FROM Areas, Maps
WHERE Areas.ID = Maps.AreaID;
这样,您可以创建一个区域,然后向其中添加地图。您还可以强制地图中的外键为 NOT NULL,因此地图必须始终有一个区域。
Map 和 Area 各有一个表,Map 上有一个外键链接到 Area。