【发布时间】:2013-06-07 08:14:07
【问题描述】:
我有两张桌子:
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 不为空(并且是Area 上的Foreign key)
但是您将无法(并且不希望)为每个区域拥有“至少一张地图”。
有一天,您必须创建一个Area。此时它不会有任何Map。
或者进行“定期”检查以查看没有任何地图的区域。
当您删除Map 时,如果Area 没有更多相关的Map,您可能想要删除它。
【讨论】:
在 Map 中添加一个引用区域主键的外键。这将在地图和区域之间实施一对多的关系。
对于每个区域至少执行一张地图(如果有必要),这篇文章here 中有一些想法。一种更简单的解决方案是创建一个仅显示具有地图的区域的视图:
CREATE VIEW viewAreas AS
SELECT *
FROM Areas, Maps
WHERE Areas.ID = Maps.AreaID;
这样,您可以创建一个区域,然后向其中添加地图。您还可以强制地图中的外键为 NOT NULL,因此地图必须始终有一个区域。
【讨论】:
地图和区域各有一个表,地图上的外键链接到区域。
【讨论】: