Вся информация на сайт выносится из базы данных. И по мере того, как я добавляю на сайт различный функционал, количество столбцов в таблицах увеличивается. Сейчас в таблице с контентом 12 столбцов, но наверняка понадобится еще больше. В таблице регистрации пользователей 25 столбцов и понадобятся еще. При этом обращение к этой таблице происходит и при открытии страницы для вывода комментариев. Хотелось бы понять, не слишком ли это много? Какое количество столбцов обычно используется, на Вашей практике?
как такового ограничения нет... но раз возникают вопросы- возможно неверно планируете структуру БД покажите текущую структуру например для пользователя?
@Vladd55, походу вы так и не поняли то, что мы втроем обсуждали в теме про шаблоны и др. Динамическая страница – это НЕ тупо вывод всех полей одной записи (и так для всех страниц). Страницы делятся на типы. За каждый тип (или схожие/связанные типы) отвечает отдельный контроллер, он может использовать много разных записей из одной или разных таблиц. --- Добавлено --- Оно зависит исключительно от потребностей хранения. Количество выбираемых столбцов тоже зависит от потребностей. --- Добавлено --- Наверняка какие-то ограничения у СУБД/движков хранилищ есть, но это будут сотни и тысячи, так что про это практически никто не вспоминает
Нет, конечно. Берем по потребности. Ну да. Пока что у меня получилось 8 типов. CREATE TABLE `users` ( `id` int(11) NOT NULL, `name` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `surname` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `middlename` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `gender` int(11) NOT NULL DEFAULT '0', `email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `password_hash` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `country` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `sity` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `work` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `post` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `company` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `about` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `file_photo_1` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `name_photo_1` text COLLATE utf8mb4_unicode_ci, `file_photo_2` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `name_photo_2` text COLLATE utf8mb4_unicode_ci, `file_photo_3` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `name_photo_3` text COLLATE utf8mb4_unicode_ci, `password_hash_tmp` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, `flag` char(3) COLLATE utf8mb4_unicode_ci NOT NULL, `activ` char(48) COLLATE utf8mb4_unicode_ci NOT NULL, `date_registration` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Для коммента из этого списка нужно пару полей Надеюсь, данные юзера подтягиваются LEFT JOIN'ом Шо за Photo_1-2-3? Разные разрешения что ли? post – почтовый адрес или что? sity не так пишется. --- Добавлено --- Решили переплюнуть либералов? Или это с расчетом на все разумные расы во Вселенной?
Photo_1-2-3 имена файлов с фото пользователя. post, sity - так забито было до меня фрилансером. Я пока на это не обращаю внимания, подобных мест много. Так оно и сделано. Я в селекторе запрашиваю только те поля, которые в данном случае понадобились. Меня встревожило общее количество столбцов в таблице. Подумал, что вдруг в этом какая-то засада. Теперь из ответов все понял. Пользуясь случаем, хотел бы спросить ещё вот что. Есть вот такая таблица рейтинга CREATE TABLE `rating` ( `ident` int(11) NOT NULL DEFAULT '0', `user_id` int(11) NOT NULL DEFAULT '0', `golos` tinyint(2) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; В ней содержимое ident и user_id (каждого из них) не является уникальным. Но уникальным является их комбинация. Обращение к таблице идет по такому запросу: Код (Text): $query = mysqli_query($db, "SELECT `golos` FROM `rating_content` WHERE `theme_id` = $theme_id AND `user_id` = $user_id"); Не нужно ли придать полям ident и user_id какое-то свойство?
В профиль, в фас и в затылок? Видел много раз одно необязательное фото, но чтобы три (в одной записи)... Групповой первичный ключ? Этого достаточно, если «система» не требует обязательного уник. поля id. --- Добавлено --- А когда id требуется, оно обычно делается перчиным ключом, а групповой – просто юником.
Всё медиа файлы в отдельную таблицу, с указанием типа и принадлежности к пользоватю password_hash_tmp очень сомнительно Всё данные типа страна, город, улица - желательно указателями на соотв справочники, а то будет у вас 20 вариантов Массква))
Уже давным давно есть json поля для NoSQL запросов в БД MySQL. Создали одно поле, и даже если планируется расширение в будущем, то просто расширяете массив внутри этого поля без добавления новых полей.