2つのテーブルがあります。
1)エリア2)地図
各エリアには少なくとも1つのマップが必要ですが、複数のマップを持つこともできます。
1つのマップは1つのエリアにのみ属することができます。
これをMySQLで構築する方法は?
エリアの主キーを参照する外部キーをマップに追加します。これにより、マップとエリアの間に1対多の関係が適用されます。
エリアごとに最低1つのマップを適用すること(必要な場合)については、この投稿にいくつかのアイデアがあります here 。より簡単な解決策の1つは、マップのある領域のみを表示するビューを作成することです。
CREATE VIEW viewAreas AS
SELECT *
FROM Areas, Maps
WHERE Areas.ID = Maps.AreaID;
このようにして、エリアを作成し、それにマップを追加できます。マップの外部キーを強制的にNOT NULLにすることもできるため、マップには常に領域が必要です。
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ではありません(Area
のForeign key
であるため)
しかし、エリアごとに「少なくとも1つのマップ」を作成することはできません(望ましくありません)。
ある日、Area
を作成する必要があります。また、現時点ではMap
はありません。または、「通常の」チェックを行って、マップのないエリアを表示します。
Area
を削除するときに、関連するMap
がない場合は、Map
を削除することをお勧めします。
マップとエリアのそれぞれのテーブル、およびエリアにリンクするマップの外部キー。