За последние 24 часа нас посетили 17505 программистов и 1725 роботов. Сейчас ищут 1554 программиста ...

Допустимое количество столбцов в таблице базы данных

Тема в разделе "MySQL", создана пользователем Vladd55, 13 фев 2023.

  1. Vladd55

    Vladd55 Новичок

    С нами с:
    11 дек 2021
    Сообщения:
    88
    Симпатии:
    1
    Вся информация на сайт выносится из базы данных. И по мере того, как я добавляю на сайт различный функционал, количество столбцов в таблицах увеличивается.

    Сейчас в таблице с контентом 12 столбцов, но наверняка понадобится еще больше.
    В таблице регистрации пользователей 25 столбцов и понадобятся еще. При этом обращение к этой таблице происходит и при открытии страницы для вывода комментариев.

    Хотелось бы понять, не слишком ли это много?
    Какое количество столбцов обычно используется, на Вашей практике?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.858
    Симпатии:
    748
    Адрес:
    Татарстан
    как такового ограничения нет... но раз возникают вопросы- возможно неверно планируете структуру БД
    покажите текущую структуру например для пользователя?
     
    Vladd55 нравится это.
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.839
    Симпатии:
    651
    @Vladd55, походу вы так и не поняли то, что мы втроем :) обсуждали в теме про шаблоны и др. Динамическая страница – это НЕ тупо вывод всех полей одной записи (и так для всех страниц). Страницы делятся на типы. За каждый тип (или схожие/связанные типы) отвечает отдельный контроллер, он может использовать много разных записей из одной или разных таблиц.
    --- Добавлено ---
    Оно зависит исключительно от потребностей хранения. Количество выбираемых столбцов тоже зависит от потребностей.
    --- Добавлено ---
    Наверняка какие-то ограничения у СУБД/движков хранилищ есть, но это будут сотни и тысячи, так что про это практически никто не вспоминает ;)
     
  4. Vladd55

    Vladd55 Новичок

    С нами с:
    11 дек 2021
    Сообщения:
    88
    Симпатии:
    1
    Нет, конечно. Берем по потребности.

    Ну да. Пока что у меня получилось 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;
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.839
    Симпатии:
    651
    Для коммента из этого списка нужно пару полей ;) Надеюсь, данные юзера подтягиваются LEFT JOIN'ом ;)

    Шо за Photo_1-2-3? Разные разрешения что ли? post – почтовый адрес или что? sity не так пишется.
    --- Добавлено ---
    Решили переплюнуть либералов? Или это с расчетом на все разумные расы во Вселенной? :D
     
    #5 miketomlin, 13 фев 2023
    Последнее редактирование: 13 фев 2023
    Vladd55 нравится это.
  6. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    922
    Симпатии:
    143
    На старом MySQL на MyISAM упирались в лимит по кол-ву полей, но там исключительная ситуация была.
     
    Vladd55 нравится это.
  7. Vladd55

    Vladd55 Новичок

    С нами с:
    11 дек 2021
    Сообщения:
    88
    Симпатии:
    1
    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):
    1.     $query = mysqli_query($db, "SELECT `golos` FROM `rating_content` WHERE `theme_id` = $theme_id AND `user_id` = $user_id");
    Не нужно ли придать полям ident и user_id какое-то свойство?
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.839
    Симпатии:
    651
    В профиль, в фас и в затылок? :) Видел много раз одно необязательное фото, но чтобы три (в одной записи)...

    Групповой первичный ключ? Этого достаточно, если «система» не требует обязательного уник. поля id.
    --- Добавлено ---
    А когда id требуется, оно обычно делается перчиным ключом, а групповой – просто юником.
     
    Vladd55 нравится это.
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.858
    Симпатии:
    748
    Адрес:
    Татарстан
    Всё медиа файлы в отдельную таблицу, с указанием типа и принадлежности к пользоватю

    password_hash_tmp очень сомнительно
    Всё данные типа страна, город, улица - желательно указателями на соотв справочники, а то будет у вас 20 вариантов Массква))
     
  10. musicman3

    musicman3 Активный пользователь

    С нами с:
    30 июн 2019
    Сообщения:
    144
    Симпатии:
    12
    Адрес:
    Дыра на карте
    Уже давным давно есть json поля для NoSQL запросов в БД MySQL. Создали одно поле, и даже если планируется расширение в будущем, то просто расширяете массив внутри этого поля без добавления новых полей.