Задать вопрос
Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
Ответы пользователя по тегу Проектирование баз данных
  • Как лучше считать количество непрочитанных сообщений?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Слово временный означает "непостоянный". А хранить вы хотите метку времени. Программист как никто должен понимать, как важно четко излагать свои мысли.

    Про "нечастые" запросы я не понял. Лет 20 назад, когда единственным способом обновить статус диалога было обновить страницу форума в браузере, это могло бы как-то проканать. А сейчас, когда пользователь ожидает обновления информации не совершая никаких действий, а просто глядя на экран, да ещё и в другом приложении, я не понимаю, как это должно работать. Когда именно приложение должно совершать свои нечастые селекты?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну как минимум за $table->string('color', 18); надо руки сразу отрывать
    То есть на координатах наэкономили, 4 байта в сумме, а потом хоба - в 4 раза больше на несчастный цвет. при том что цветов там явно не больше десятка. И это не говоря уже про нормализацию.

    По уму надо придумать простой бинарный протокол, который получает поток байт выравненными кусками
    2 байта х
    2 байта у
    1 байт цвет
    4 байта юзер (и нечего жадничать, никаких BigInteger. половины населения земного шара вполне хватит)
    то есть всего 9 байт.
    а не под сотню, как сейчас - ещё и завернутое в скобочки/кавычечки джейсона

    Если подумать, то можно юзера сразу не передавать. Всех юзеров никто смотреть не будет, а при наведении можно и отдельный запрос послать. Тогда можно и BigInteger оставить.
    Получится всего 5 байт на пиксель, то есть 10 метров на всю карту. Дофига, но подъемно.

    По пагинации это дурь какая-то. Зачем "офсет-лимиты" если уже есть четкая разбивка.
    Кто мешает запрашивать тупо построчно? Скажем, по 100 строк картинки? 10 запросов по мегабайту.
    id в этой таблице по сути вообще не нужно, только если лара без него не сможет. Но по уму первичный ключ - это ху.

    Из БД получать 2 лимона строк конечно тоже не сахар
    Но можно наверное увеличить строки, хотя бы виртуально.
    Вью или процедура, которая комбинирует скажем сто строк в одну

    Насчет других хранилищ я не уверен. Там же наверняка нужна будет выборка обновлений, по таймстампу.
    Но в целом с Редисом поэкспериментировать можно.
    Ответ написан
    1 комментарий
  • Целесообразно ли хранить изображения как BLOB в БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну то есть логика этого вопроса в том, что по какой-то причине файл с БД забэкапить затруднительно, а вот картинки, которые лежат в этом файле - наоборот
    Так же и "стороннее средство" в виде команды copy ну вообще ни с чем несовместимо, а создание/разворачивание "дампа" специфическими для БД средствыми доступно на каждом углу.
    Не говоря уже про доступ к этим картинкам сторонними средствами.

    Все-таки анекдот про Вовочку, "Где логика, где разум?" должен быть девизом этого сайта.
    Ответ написан
  • Как спроектировать базу для приложения заметочника?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    - не станет ли всё это дело тормозить? - не станет
    - нужно ли разносить информацию по разным таблицам? - нужно. Плюс таблицы-связки, "заметка-раздел", "заметка-тег". Но сначала надо определиться, чем отличается раздел от категории.
    - Как максимально задействовать localStorage? - никак
    Ответ написан
    Комментировать
  • Какие связи будут у таблиц?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В юзерах никаких упоминаний картинок быть не должно
    В картинках должно быть ещё две колонки, юзер айди и тип - фото, юзер, галерея
    Ответ написан
  • Как лучше сохранять дату и время?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    вот я тоже не понял, в чем смысл этого "справочника"

    А справочник для цифр не хотите ввести? Ну там к примеру датчик показывает 200 миллизюзиков
    вы пишете 200 не в таблицу с показаниями, а берете её из справочника показаний, а в таблице с показаниями делается ссылка на это значение.
    А можно ещё сделать справочник цифр от 0 до 9, и присоединить его как многие ко многим. Сделать промежуточную таблицу, в которую записать ссылки на цифры 2, 0 и 0. И получить 200 через "понятное присоединение таблиц (join)"!
    Ответ написан
    5 комментариев
  • Как хранить заметки из картотеки: одним файлом, или на каждую свой?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В реляционной базе данных.
    Ответ написан
    Комментировать
  • Как правильно организовать базу даных?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    вопрос довольно сумбурный
    структура БД не определяется структурой "меню".
    непонятна связь между "контентом" и "каталогом"
    непонятно, зачем таблица с меню

    я не в том плане, что это неправильная структура, а в том, что из неё непонятно, чем в итоге сайт занимается. и как следствие непонятно, какая структура на самом деле должна быть

    обычно каталог - это совсем отдельная тема
    состоит, условно, из двух таблиц - категории и товары
    в твоем случае наверное надо добавить таблицу-связку товаров и городов. Ведь не может же быть так, что в каждом городе продается свой отдельный вариант дверей?
    Ответ написан
    Комментировать
  • Как правильно создать БД под фильтр?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну вот разные типы товаров - это классика.
    Таблицу можно сделать одну, уникальные для каждого товара характеристики хранить можно в поле джейсон, а искать специальными движкаии типа сфинкса или эластика
    Ответ написан
  • Как лучше осуществлять хранение даты последней активности пользователя?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На наш взгляд, оптимальнее всего не забивать себе голову детскими фантазиями и высосанными из пальца проблемами.
    У тебя нет сайта, нет пользователей, нет одновременной активности, нет проблем с производительностью.
    Но зато уже есть ПРОБЛЕМА. Которую надо срочно решать.

    С архитектурной точки зрения надо делать как обычно, и не пытаться решать несуществующие проблемы, изобретая какие-то хитрые решения с подвыподвертом. Потому что когда (если) проблемы с производительностью начнутся, то окажется, что это совсем не те, которые ты с таким трудом доблестно решал всё это время.

    Не говоря уже о том что в реальности у тебя на сайте будет полтора инвалида, и единственной проблемой будет куда бы спихнуть это никому не нужное творение.
    Ответ написан
    3 комментария
  • Как выгоднее собирать свой форум?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Первый вопрос который надо решить до стадии написания кода, это какой будет вид у форума - древовидный или линейный.
    Пока выглядит так что ты описываешь древовидный. Но надо понимать что они в природе уже почти не встречаются. Из известных разве что Реддит.
    И в любом случае то как ты собираешься загружать - это очень неэффективно. В одном треде (посте) могут быть тысячи ответов и так как ты собираешься загружать (и за ними их комментарии итд.), будет очень неэффективно.

    В общем, рекомендую сделать линейный, когда есть пост и к нему комментарии.
    Чтобы было понятно, на какую реплику пишется ответ, можно сделать цитирование.

    Ну и последнее.
    Если ты хочешь научиться программировать, то конечно пиши.
    Но если твоя цель - получить форум на сайте, то разумеется надо взять готовый.
    Ответ написан
    7 комментариев
  • Какую сделать структуру и запросы для каталога?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нормальная структура. Только писать в таблице parentCategory_id глупо, по двум причинам. Во-первых, у товара нет никакой родительской категории. А есть просто категория. Во вторых, мешать стили именования - это как ходить в гразных штанах. Традиционно для баз данных используется змеиный стиль в нижнем регистре. Поэтому просто category_id

    Второй пункт относится и к таблице категорий тоже. поэтому просто parent_id

    Как получать все дочерние категории - в общем без разницы. можно с рекурсией, но чтобы было совсем просто, я предлагаю тупо добавить поле path, в котором печечислить все родительские котегории через точку. Например для жидкого туалетного мыла path будет 1.2.3.4.6
    соответственно, если клиент ждет мыла, то получаем path из мыла, и пишем в запросе WHERE path like "1.2.%"

    Заодно и выводить сортировать дерево категорий моно будет простой сортировкой order by path
    Ответ написан
    Комментировать
  • Как вы называете столбцы в таблицах MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Зарезервированные слова можно использовать, заключая их в обратные кавычки, `key`
    2. name - это ключевое слово, а не зарезервированное. А keywords are permitted as identifiers without quoting
    Ответ написан
    Комментировать
  • Как правильно хранить в Базе данных Разные названия одного фильма, тип фильма?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Речь идет только о переводах? Если да, то таблица с 4 полями: иза фильма, ид языка, название, флаг оригинальности.

    Статус я бы хранил в отдельной таблице. енум хорош для случаев когда заранее точно известен набор вариантов. Здесь наверняка значения будут добавляться и лучше делать это через обновление данных, а не структуры
    Ответ написан
  • Как добавить сразу несколько файлов (jpeg, png) на сервер?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Открою тебе тайну.
    В твоем компьютере живет волшебный джинн.
    Ты только должен сказать ему свое желание, и бац - он тут же даст миллион ответов.
    Желание надо писать в адресной строке своего браузера.
    Ответ написан
    Комментировать
  • Как лучше хранить контент в БД: HTML vs MarkDown?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Поскольку из поиска люди попадают в пост по заголовку, то отбросим несущественные заморочки автора с его текущим проектом и ответим на вопрос, который он вынес в заголовок:

    Однозначно MarkDown.

    Хтмл - это ужас, который надо валидировать, перевалидировать, форматировать и переформатировать на каждый чих. Править можно только в редакторе. Поменять один тег на другой головная боль на много часов.

    Маркдаун легко читается, прекрасно редактируется, быстро корнвертируется.
    Тут даже вопроса нет, что применять - окаменелое экскремент мамонта или новенький айфончик.
    Ответ написан
    Комментировать
  • Как выбрать родителя и всех детей?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Хотелось бы обьединить всех детей в один элемент.


    Это вопрос не выборки, а обработки результатов.
    База данных не отвечает за формат вывода запрашиваемых данных.

    В PHP с использованием PDO для такого простого запроса можно получить группировку с помощью комбинирования режимов FETCH_GROUP и PDO::FETCH_COLUMN

    Но при большем уровне вложенности или при необходимости получать какие-либо еще данные кроме имени, нужно будет писать обработчик руками.
    Ответ написан
    Комментировать
  • Каталог с сортировкой: как решить проблему при выводе с сортировкой?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    если данные атрибутов находятся сериализованные в базе в таблице option,

    Взять рельсу, и долго с наслаждением бить по голове того, кто стал хранить данные атрибутов сериализованные в базе в таблице option. Потом добавить по почкам.

    Потом перепроектировать базу.
    Сделать категории в нормальной таблице, приджойнить к запросу и сортировать по ним.
    Ответ написан
    1 комментарий