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

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

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

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

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

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

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