Ответы пользователя по тегу Базы данных
  • MySQL vs другие СУБД - что лучше?

    Kerman
    @Kerman
    Препод Вам так говорит, потому что есть такое понятие - стек технологий Microsoft. И для многих C# должен стыковаться только с MSSQL, но не с другими базами. В этом действительно есть смысл, когда проект очень большой. Грубо говоря, язык и БД, разработанные в одной компании, довольно тесно интегрированы. Но это не значит, что MSSQL единственный и самый разумный выбор.
    Я сам пишу на C# и пользуюсь MySQL вместо MSSQL. Почему:
    1. MySQL запускается на любой OS (не требует платной лицензии Windows).
    2. Полнофункциональная MySQL бесплатна в отличие от.
    3. Легковесна, не требует мощного железа. Как следствие - быстрее на аналогичном железе.
    4. Хостинг MySQL на каждом углу.
    5. Выбор движков под каждую таблицу и каждый случай.
    6. Полнотекстовый поиск (в MyISAM).
    7. Есть форки, которые гарантируют нормальное развитие, если Oracle решит что-нибудь нехорошее сделать. Ну что тут говорить, OpenSource же.

    При этом современная MySQL поддерживает многие фичи современных БД: View, triggers, functions, stored procedures, events, subqueries.
    Ответ написан
    2 комментария
  • Как в SQL выбрать пользователей, у которых день рождения в ближайшую неделю?

    Kerman
    @Kerman
    Предыдущим двум: не всё так очевидно, как кажется. Вы выбираете по дате рождения, а не ДНЮ рождения.
    Для того, чтобы найти день рождения можно воспользоваться функцией DAYOFYEAR(date).
    Должно получиться что-то вроде
    WHERE DAYOFYEAR(birthday) BETWEEN DAYOFYEAR(NOW) AND DAYOFYEAR(DATE_ADD(NOW(), 7 INTERVAL DAYS))

    Запрос не проверял, но надеюсь, идея понятна.
    Ответ написан
    2 комментария
  • Существует ли "база данных", в которой бы можно было сделать выборку N случайных записей из отфильтрованного по условиям набора?

    Kerman
    @Kerman
    Если нужен именно честный выбор действительно случайных и равномерно распределённых 10000 строк из пятимиллионной таблицы, то лучше SQL с этой задачей ничто не справится. Разве что самописная база, заточенная конкретно под этот случай. Нужно просто расставить индексы на нужные поля, чтобы облегчить поиск.
    Мой совет: добавьте памяти на сервер, проиндексируйте поля. Всё будет хорошо, используйте стандарный RAND(), оптимизировав его до приемлемого значения.

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

    Kerman
    @Kerman
    Две таблицы в этом случае не нужны. Совершенно никому не нужный, бессмысленный и беспощадный оверинжиниринг. Только замучаетесь LEFT JOIN делать с поводом и без, и поддерживать целостность такой связки.
    Оптимизировать нужно в первую очередь так, чтобы проще было работать. И уж только потом, когда это работает, и в случае, если это тормозит, тогда и только тогда оптимизировать быстродействие.
    Да и если в таблице всего 40к записей, то это тормозить не будет (разве что если Вы на калькуляторе запускаете базу) и небольшие проблемы с производительностью решатся грамотной расстановкой индексов в таблице.
    Ответ написан
    Комментировать
  • Как лучше спроектировать базу данных (mysql)?

    Kerman
    @Kerman
    Я бы для каждого раздела создавал свою табличку. Так проще потом информацию вносить.
    А для того, чтобы выбирать на главную новости можно создать VIEW, которая объединяет все объекты из всех таблиц в одну с помощью UNION.

    Если точнее, для сводной таблицы можно вынести только несколько параметров:
    ID объекта, раздел, дата (чтобы сортировать). После выборки для показа на главной уже можно запросить нужные поля из профильной таблицы.
    Ответ написан