Ответы пользователя по тегу Проектирование баз данных
  • Можно ли в mysql хранить 200 колонок, для 10+млн записей?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Смотрим здесь. Получаем для обычного INT 4 байта на одно число, для BIGINT 8 байт.
    200 * 4 * 10'000'000 = 8'000'000'000 или 8Gb.
    200 * 8 * 10'000'000 = 16'000'000'000 или 16Gb.
    По нынешним меркам сущие пустяки.
    Хранить, конечно же, нужно в нормальной форме, иначе суммирование придётся делать в приложении.
    Ответ написан
    3 комментария
  • Как проставить значения поля одной таблицы в другую, а из другой в первую?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Создаёте запись в первой таблице без указания связи, получая ID созданной записи через RETURNING. Создаёте запись во второй таблице, указывая связь с первой и получая ID созданной записи через RETURNING. Меняете запись в первой таблице, прописывая ID связанной записи из второй таблицы.
    Но, по большому счёту, одна из ссылок лишняя. Она ничего не даёт, только добавляет необходимость дополнительного контроля, чтобы не оказалось, что столица Китая - Пекин, но Пекин - столица США.
    Ответ написан
  • Может ли быть вложенным Foreign Key?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Может. Достаточно. JOIN.
    Ответ написан
    Комментировать
  • Как сохранить целостность данных?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Может быть нужно добавить еще один столбец с названием фермы ?
    Именно. Только не с названием, а с идентификатором. И сделать составной первичный ключ (id_фермы, id_бирки).
    Ответ написан
    Комментировать
  • Как высчитать максимальную нагрузку на БД?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Шанс выигрыша определяется не номерами билетов, а исключительно их количеством. Так что никакого смысла генерировать и хранить номера нет. Достаточно добавлять нужное количество билетов пользователю.
    Ответ написан
    7 комментариев
  • Как связать данные из одной таблицы SQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    На ум приходит решение создать вторую таблицу где для каждого товара указывать id других товаров с которыми он может продаваться
    Правильно приходит. Это стандартное решение - таблица связи для отношения многие-ко-многим.
    Ответ написан
    Комментировать
  • Вы можете объяснить, что такое четвертая нормальная форма так, чтобы было понятно?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Как можно объяснить без составных ключей понятие, базирующееся на составных ключах? Да и в вики вроде всё подробно разжёвано.
    Ответ написан
    Комментировать
  • Как организовать хранение множества тегов в БД?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А что вам мешает в таблицу questions_tags добавить несколько записей с одним question_id и разными tag_id?
    Ответ написан
    2 комментария
  • Как правильно хранить заказы продуктов в базе данных mysql?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если ваши данные нужны исключительно для хранения в БД (записали/прочитали), то можете держать их в любом виде. Если же с ними нужно будет работать - выполнять поиск, агрегацию, изменение - то правильно записывать их в отдельную таблицу и приводить базу в нормальную форму.
    Ответ написан
    Комментировать
  • Правильно ли организовал связи сущностей?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если вас в схеме есть связь один-к-одному, то, с большой вероятностью, вы что-то сделали неправильно.
    В данном случае нет необходимости в отдельной таблице `refferal`, достаточно поля `referrer_id` в таблице `users`, так как пользователь может зарегистрироваться только по одному приглашению.
    Аналогично, не имеют смысла таблицы `inventory` и `item_inventory`, достаточно поля `user_id` в таблице `items`.
    Ответ написан
    3 комментария
  • Как сделать структуры БД для автомобильных товаров?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А теперь покажите, как будет выглядеть ваш первый вариант, если, например, модель 1 в комплектации 1 может иметь двигатели 2 и 3, в комплектации 3 двигатели 3 и 4, а в остальных комплектациях она не выпускается. А модель 2 выпускается в комплектациях 2, 3, 4 и 5, но двигатель тоже зависит от комплектации. А если это всё ещё зависит и от поколения?
    Ответ написан
    Комментировать
  • Какой алгоритм хеширования использовать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Важно исключить возможность коллизий
    Тогда чистый хэш вам не подходит. Хэш, как правило, отображает множество входных данных на меньшее по размеру множество хэшей и по определению допускает коллизии.
    Ответ написан
  • Какой ключ выбрать для клиентской базы данных?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Фамилию и имя можно поменять. Номер сотового тоже.
    Уникальным, в теории, должен быть СНИЛС.
    Ответ написан
  • Реализация игры "Морской бой" на серверной части?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Нужна таблица с состояниями полей, как описал Владимир Коротенко и таблица с общим состоянием игры (game_id, user1_id, user2_id, next_move_user_id).
    0. Сервер генерирует новую игру и рассылает её id обоим игрокам.
    1. Игрок расставляет на своём поле корабли и сообщает расстановку серверу.
    2. Сервер проверяет корректность расстановки и сохраняет её в базу данных.
    3. Когда расстановка обоих игроков сохранена, сервер выбирает, за кем будет первый ход, и посылает сообщение о начале игры.
    4. Игрок присылает на сервер свой ход (id_игры, id_игрока, строка, столбец).
    5. Сервер проверяет корректность и результат хода, сохраняет новое состояние и посылает результат хода обоим игрокам.
    6. Повторять с 4 пункта до выигрыша какого-либо игрока.
    Ответ написан
    Комментировать
  • Как моделировать таблицы, которые должны хранить данные пользователей (в частности, их имена)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    https://habr.com/ru/post/431866/
    Если хотите сразу для всех культур, то достаточно двух полей - полное имя и краткое имя. Причём, оба поля без ограничений на набор символов и длину.
    Ответ написан
  • Как вам БД- продажа билетов. что плохого, что хорошего? как лучше всего связать таблицу "Зал" и "Сектор"?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. Зачем в билете поле "зал", когда оно есть в сеансе?
    2. Зачем в билете поле "сектор", когда оно есть в цене?
    3. Зачем в цене поле "сектор" ни с чем не связанное?
    4. Зачем в сеансе Поле1?
    5. Из чего определяется цена? Возможно, должна быть таблица вида (зал, сектор, интервал дат, цена) или (сеанс, сектор, цена)?
    Ответ написан
    8 комментариев
  • Как правильно составить структуру таблиц для системы подписок?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Храните начало и конец срока действия подписки, и пусть покупают хоть посуточно.
    Ответ написан
    Комментировать
  • Как лучше спроектировать бд?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    IMHO, самый простой вариант - временны́е слоты по 15 или 30 минут и SQL.
    Ответ написан
    3 комментария
  • Как ограничить число отношений к записи?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Как именно пользователь бронирует столик? Скорее всего на определённое время, то есть, например, с 15 до 18. При этом, наверняка, есть некоторый шаг бронирования (например, 1 час). Соответственно, появляются слоты 15, 16, 17 часов.
    Значит в таблицу записывается id столика и временной слот бронирования. Создаётся уникальный ключ (id_столика, слот). Запись всех слотов делается в рамках одной транзакции, тогда никто не сможет вклиниться в процедуру сохранения бронирования.
    Ответ написан
  • Как строятся связи в БД?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Связи между таблицами - понятие больше архитектурное, чем техническое. На уровне базы данных они вообще могут никак не контролироваться или просто давать ограничение для поддержания корректности базы.
    Связь один-к-одному используется достаточно редко и две таблицы с такой связью могут быть заменены на одну, содержащую данные из обеих таблиц.
    Связь один-ко-многим чаще всего используется при работе со всякими справочниками. Например, таблица городов и таблица адресов. Один и тот же город может входить в произвольное количество адресов, при этом каждому адресу соответствует только один город. Такая связь реализуется через указание идентификатора строки из первой таблицы в одном из полей второй таблицы. На уровне базы данных может быть наложено ограничение, запрещающее записать в таблицу адресов строку с неверным или не указанным идентификатором города.
    Связь многие-ко-многим. Например, таблица пользователей и таблица чатов. В одном чате может принимать участие произвольное количество пользователей, один пользователь может участвовать в произвольном количестве чатов. Такое отношение реализуется с помощью промежуточной таблицы, каждая запись которой связывает одного пользователя с одним чатом. Кроме связи, такая таблица может содержать дополнительные данные, например роль данного пользователя в данном чате. На уровне БД может быть наложено ограничение на создание записей с несуществующими или не указанными идентификаторами пользователя или чата.
    Ответ написан
    Комментировать