Я хотел бы реализовать следующую/любимую систему. Я могу представить два способа реализации структуры базы данных/таблицы, но я не уверен, какой из них реализовать. Какой из них будет считаться передовой практикой и, самое главное, почему?Структура базы данных MySQL для последователей
Я поместил всех своих последователей в одну строку. Помещая всех последователей в одну строку, это уменьшает количество избыточных строк.
Ex.
ID (1) || user_id (1) || follower_ids (2, 3, 45)
'CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1';
'CREATE TABLE `follow` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`follower_ids` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1';
ИЛИ
Я положил каждый follow_id по отдельности, но добавляет избыточность, имеющую 3 строки, для одной и той же user_id.
Ex.
ID (1) || user_id (1) || follower_id (2)
ID (2) || user_id (1) || follower_id (3)
ID (3) || user_id (1) || follower_id (45)
'CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1';
'CREATE TABLE `follow` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`follower_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1';
не из них. Они оба пропускают индексы, вероятно, самые важные. –