Ответы пользователя по тегу Базы данных
  • Какие базы данных использовать в php сайтах?

    Чисто в теории можете попробовать slight - никакой установки.
    Ответ написан
    Комментировать
  • Как правильно проводить "раскопки" сложной структуры БД на крупном проекте?

    В целом - создать несколько схем. Обычно работает примерно такая последовательность действий:

    0. Начать с пустой глобальной схемы.

    1. Внести в неё только названия таблиц. Разделить таблицы на основные бизнес-сущности, элементы агрегатов, справочники, таблицы связи и т. п. Чёткого алгоритма нет, интуитивно всё, глядя не только на схемы таблиц, но и на сами данные (если за пять лет работы в таблице 10 значений, то скорее всего это справочник), приложение, статистику СУБД и т. д.

    2. Добавить в таблицы на схеме первичные и внешние ключи. Очень поможет, если есть основания полагать, что все внешние ключи реализованы средствами СУБД.

    3. Сгруппировать таблицы по "модулям" (группам с предположительно схожей функциональностью), основной критерий группировки - внешние связи. В идеале на каждую группу должна быть одна внешняя связь от другой группы. Исключение - сквозные для приложения модули типа "Система разграничения прав" и(или) "Система аудита", ссылки на которые или из которых есть практически в каждой таблице.

    4. Для каждого выявленного модуля (включая сквозные) создать отдельную схему, перенося с глобальной все вспомогательные таблицы модулей.

    5. Детализировать по мере необходимости, если анализ делается для себя. Сразу, если для внешнего потребления.
    Ответ написан
    Комментировать
  • Хорошая ли идея использовать в качестве ID (первичного ключа) мд5 хеш?

    Если «Мд5 строить все равно придется», он будет заведомо уникальным (то есть логика не допускает добавления двух картинок с одним хэшем), то почему нет (при условии что индексы и основной, и связанных таблиц будут помещаться в памяти, если важно быстродействие). В любом случае, насколько я понимаю, хэш будет считаться только при попытке добавления картинки в базу, а количество выборок по ид будет много больше числа таких попыток.

    Вот только я бы посоветовал хорошо подумать, а действительно ли вам нужна уникальность хэша, не может ли это требование потом измениться. Или, скажем, решите сменить алгоритм хэша — изменение отдельного уникального поля куда менее дешевая операция, чем изменение основного ключа и всех индексов связанных таблиц.

    Плюс, если я правильно понял идею (что-то вроде фотохостинга, хэш картинки используется для урлов) могут быть интересные ситуации типа: один пользователь добавил картинку, получил её новый урл, потом второй добавил её же, система засекла дубликат и выдала уже существующий хэш. Затем первый пользователь удалил картинку, система засекла, что есть ещё ссылки и удалила только ссылку из альбомов первого пользователя, не удаляя саму картинку — в итоге первый пользователь может увидеть, что несмотря на удаление картинка осталась доступна по старому урлу. Кому-то может всё равно, а кто-то может поднять крик про личные данные и т. п.
    Ответ написан
    1 комментарий
  • Выбор СУБД для проекта?

    Почему-то все отвечающие акцентировали внимание на выбор между разными, но очень похожими SQL РСУБД. NoSQL вполне себе достойная альтернатива, особенно если подавляющее большинство выборок либо являются выборками по одной таблице со словарями, либо сложными выборками, нацеленными на обеспечение гибкой схемы сущностей (задаваемые пользователями атрибуты и т. п.).
    Ответ написан
  • Контроль версий базы данных (сайта)

    Вроде как Drupal из коробки поддерживает версионирование нод.
    Ответ написан
  • На чём писать демона

    Если вам точно нужен статический язык, но не си/плюсы, то посмотрите в сторону Java/С#.
    Ответ написан
    1 комментарий
  • Типы полей в MySQL?

    Под name использовать 25 в случае utf-8 имхо не самая лучшая идея, даже если ограничиться русским, на мыло 50 тоже может не хватить в извращенных случаях, но соответствующих rfc (домены.рф например :) ). Да и вообще никакого оверхеда между varchar(1) и varchar(256) нет, смысла экономить не вижу, если в требованиях есть ограничения, то проверять их в приложении и именно на количество символов, а не байт (для php — mb_strlen(), а не strlen() ).
    Ответ написан
    2 комментария
  • NoSQL + Python

    Довольно много полезного про NoSQL (при применении в вебе вообще, и в django в частности) есть вот здесь allbuttonspressed.com/
    Ответ написан
    Комментировать
  • Объясните, зачем нужны документо-ориентированные БД (MongoDB)?

    Если абстрагироваться от таких «мелочей» как производительность, масштабируемость и надёжность, то Д(окументно)О(ориентированные)СУБД и О(объектно)О(ориентированные)СУБД во многих случаях позволяют разработчику отражать сущности предметной области на сущности БД без введения дополнительных сущностей :), которые приходится вводить в Р(еляционных)СУБД. Например, сколько копий переломано в спорах о том, как хранить в РСУБД объекты различных классов, унаследованных от одного базового класса (в одной таблице с кучей пустых полей, в таблицах для каждого отдельного класса, в общей таблице общие поля, ...), а тут просто храним в одной «таблице» и не думаем о таких мелочах. Отношения 1:1 и 1: М, когда сущности во второй половине отношения принадлежат одной и только одной сущности первой и не имеют смысла без неё также отображаются без дополнительных таблиц и полей для связи (вместо comments.post_id и comments.content просто храним в поле posts.comments список/массив комментов, не заботясь о целостности связей, синхронизации и т. п.). Другими словами, ДОСУБД часто облегчают жизнь разработчику, хотя иногда её усложняют (когда связи двунаправленные прежде всего, особенно M: М — для установления связи между двумя уже существующими сущностями надо производить две операции — добавление к первой ссылку на вторую, а ко второй на первую -, а не одну — добавление в таблицу связи — как в РСУБД )
    Ответ написан
    Комментировать
  • Испольование в одной таблице пары instance_id, instance_type в Doctrine

    Использую Doctrine ODM + MongoDB :)

    Если не подходит такой вариант рассмотрите возможность создания общего примарикей (возможно ещё какие-то поля будут общие) для инстансов, то есть вместо instance_id и instance_type в log хранится inctance_id, но он общий для двух таблиц и связь происходит либо непосредственно через него (тогда надо обеспечить уникальность id в обеих таблицах, простой автоинкремент не подойдёт), либо создать ещё одну таблицу с полями id (автоинкрементное, по которому связь идёт с log), instance1_id, instance2_id + другие общие поля. В общем паттерн «наследование с таблицами для каждого класса» (если не напутал).

    Как-то пробовал решать подобную задачу, но у меня число типов было неограниченно и одним SQL так и не смог её решить
    Ответ написан