Якщо ви використовуєте кілька стовпців в унікальному індексі, і принаймні один з цих стовпців є обов'язковим (тобто обов'язкове поле форми), якщо ви встановите інші стовпці в індексі NULL, ви можете отримати дублюючі рядки. Це тому, що значення NULL ігноруються в унікальних стовпцях. У цьому випадку використовуйте порожні рядки в інших стовпцях унікального індексу, щоб уникнути дублювання рядків.
КОЛИНИ В УНІКАЛЬНОМ ІНДЕКСІ:
(event_type_id, event_title, дата, місцезнаходження, URL)
ПРИКЛАД 1:
(1, 'BBQ', '2018-07-27', null, null)
(1, 'BBQ', '2018-07-27', null, null) // дозволено і дублюється.
ПРИКЛАД 2:
(1, 'BBQ', '2018-07-27', '', '')
(1, 'BBQ', '2018-07-27', '', '') // НЕ дозволено, оскільки він дублюється.
Ось кілька кодів:
CREATE TABLE `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`event_id` int(11) DEFAULT NULL,
`event_title` varchar(50) DEFAULT NULL,
`date` date DEFAULT NULL,
`location` varchar(50) DEFAULT NULL,
`url` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `event_id` (`event_id`,`event_title`,`date`,`location`,`url`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Тепер вставте це, щоб побачити, що це дозволить дублювати рядки:
INSERT INTO `test` (`id`, `event_id`, `event_title`, `date`, `location`,
`url`) VALUES (NULL, '1', 'BBQ', '2018-07-27', NULL, NULL);
INSERT INTO `test` (`id`, `event_id`, `event_title`, `date`, `location`,
`url`) VALUES (NULL, '1', 'BBQ', '2018-07-27', NULL, NULL);
Тепер вставте це і переконайтеся, що це не дозволено:
INSERT INTO `test` (`id`, `event_id`, `event_title`, `date`, `location`,
`url`) VALUES (NULL, '1', 'BBQ', '2018-07-28', '', '');
INSERT INTO `test` (`id`, `event_id`, `event_title`, `date`, `location`,
`url`) VALUES (NULL, '1', 'BBQ', '2018-07-28', '', '');
Отже, тут немає правильного чи неправильного. Ви самі вирішуєте, що найкраще працює з правилами вашого бізнесу.