Отношение "один ко многим" в MySQL - как построить модель? - программирование
Подтвердить что ты не робот

Отношение "один ко многим" в MySQL - как построить модель?

У меня есть две таблицы:

1) Площадь 2) Карта

Каждый регион должен иметь как минимум 1 карту, но также может иметь более одной карты.

Одна карта может принадлежать только одному окну.

Как построить это в MySQL?

4b9b3361

Ответ 1

Добавить внешний ключ на карте, который ссылается на основной ключ области. Это обеспечит соблюдение отношений "один ко многим" между Картами и Районами.

Как для обеспечения минимум одной карты для каждой области (если это необходимо), в этой статье есть несколько идей . Одним из простых решений было бы создать представление, которое отображает только области с картами:

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

Таким образом, вы можете создать область, а затем добавить к ней карты. Вы также можете принудительно использовать внешний ключ на картах NOT NULL, поэтому на карте всегда должна быть область.

Ответ 2

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.

Ответ 3

Таблица для каждой карты и области с внешним ключом на карте, привязанной к области.