Как разделить хранение данных одного столбца на два столбца?
Есть 2 таблицы. В первой хранится информация об участниках мероприятий и их роли на отделениях мероприятия. Называется "Participants". И вторая таблица, где хранится информация об отделении мероприятия. Называется "Branches".
Participants
CREATE TABLE `Participants` (
`id` int(11) NOT NULL,
`idEvent` int(11) NOT NULL,
`idUser` int(11) NOT NULL,
`idBran` int(11) NOT NULL,
`role` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Branches
CREATE TABLE `Branches` (
`id` int(11) NOT NULL,
`nameBran` varchar(50) NOT NULL,
`content` varchar(200) NOT NULL,
`idEvent` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Хотелось бы поле idBran сделать внешним ключом на таблицу Branches, но это не получится т.к. в данный момент в поле idBran могут хранится не только id конкретного отделения, но и 0. Этот 0 означает, что роль участника такова, что не требует участия в конкретном отделении. Например, организатор или помощник организатора. Каким образом можно это исправить, чтобы была более верная структура таблиц? Можно с использованием доп. таблицы.
Ответы (1 шт):
Да, действительно, Null, вместо 0 вполне решает проблему, как и подсказал Akina, но хотелось бы обойтись без пустых или подобных значений. Этого можно добиться, если ввести таблицу вип-участники или организаторы. Null, хоть и проще использовать в этой структуре, но правильнее, на мой взгляд, сделать доп. таблицу. Из неё и выбирать будет легче. Коды таблиц не поменяются, но поменяется информация, которая будет в них записываться:
Доп. таблица VipParticipants:
CREATE TABLE `VipParticipants` (
`id` int(11) NOT NULL,
`idEvent` int(11) NOT NULL,
`idUser` int(11) NOT NULL,
`vipRole` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;