Ответы пользователя по тегу SQL
  • Как создать файл с расширением .db из файла с расширением .sql?

    Давайте условимся говорить о формате sqlite, раз уже выяснили в комментариях.
    Итак, качайте command-line shell отсюда: sqlite.org/download.html
    Запускаете его, указав в качестве параметра имя нового файла БД, например sqlite3 demo.db (пример тут).
    Дальше все инструкции на SQL поочередно вставляете и выполняете. Все будет писаться в указанный вами файл.

    Если очень хочется GUI, то SQLiteStudio - то, что я обычно рекомендую. Там также нужно будет подключить новую БД, и выполнить в ней все ваши SQL конструкции.

    Впрочем, Руслан Федосеев привел куда более удобный вариант, чем по одному запросу кидать))
    Ответ написан
    Комментировать
  • Как организовать структуру базы данных для динамических характеристик?

    Как добавить товар в корзину?

    - EAV (ссылку дал @muhammad_97);
    - JSON/XML в реляционной базе;
    - JSON в документной базе (CouchDB/MongoDB) (предпочтительный вариант);
    Ответ написан
  • Используете ли вы реляционные и документоориентированные субд в одном проекте?

    Да, применяем. Все данные, у которых есть нормальная схема - в постгресе, данные, для которых нет общей схемы (в том числе пользовательские атрибуты к сущностям предметной области - различные заметки и комметарии, свой набор для каждого пользователя) - в монге.
    Ответ написан
    4 комментария
  • Почему MySQL использует только часть индекса?

    Четыре раза перечитал - так и не понял, зачем вам time при айдейте поля с ID процесса на ноль. Если вы сначала делаете так:
    UPDATE `test` SET `lock` = 1 WHERE `lock` = 123456
    то почему потом не сделать с точностью до наборот?
    UPDATE `test` SET `lock` = 0 WHERE `lock` = 1

    Если вы скажете, что несколько процессов могут выполнять задание, и нельзя просто так проставить нули всем заданиям, у кого 1, то я вам скажу, что вам нужна нормальная структура таблицы, и стоит разделить "lock" и "process_id". Хотя конечно непонятно, зачем вам такой переход: 0 -> process_id -> 1 -> 0, сделайте 0 -> process_id -> 0, и у вас будут нормальные запросы:
    UPDATE `test` SET `process_id` = 123456 WHERE `process_id` = 0 ORDER BY `time` LIMIT 1000
    UPDATE `test` SET `process_id` = 0 WHERE `process_id` = 123456
    Ответ написан
    Комментировать
  • Какая должна быть структура SQL запросов, учитывая текущего пользователя?

    Nipheris
    @Nipheris Куратор тега C#
    Направление мыслей верное, с технической точки зрения тоже. Не уверен насчет необходимости обновления апдейтов и делитов - если вы уже проверили UserId и выяснили, что запись принадлежит конкретному пользователю, и получили ее Id - то и удалять уже достаточно только по Id (за исключением, конечно, случая, когда вам нужно удалить ВСЕ записи конкретного пользователя).
    Правильность этого варианта зависит от вашей задачи. Если вам достаточно знать пользователя-владельца - то все хорошо, но если вы потом захотите более сложную систему доступа к записям - например давать и другим пользователям доступ к записям пользователя A, то и схема базы также усложнится.
    Ответ написан
    3 комментария
  • Как научиться строить модели БД sql в связке с С# (Цель- писать понятные ТЗ для программистов С#)?

    Nipheris
    @Nipheris Куратор тега C#
    Сложно вам посоветовать в такой ситуации что-либо. Интересно, чем занималась контора та, что программисты C# с sql не знакомы, разве что играми..
    В целом вам надо ознакомиться с современным представлением о реляционных БД (вы же все-таки аналитик, вам нужно знать на разных уровнях и масштабах), с архитектурой приложений, использующих РБД (толстые и тонкие клиенты, веб-приложения), и потом уже некоторые детали касающиеся языка.
    С точки зрения программиста C#, я бы от вас как от аналитика ожидал знание различных принципов и дисциплин доступа к рел. данным, а именно:
    - использование ORM: когда можно и нужно), когда хочется, но нельзя, когда можно "толстую" ORM (Entity Framework, NHibernate), а когда - тонкую (LINQ to SQL); использование кода на стороне БД - триггеры, хранимые процедуры;
    - принципы построения слоев доступа к данным в сочетании с бизнес логикой (паттерны и антипаттерны в этих ситуациях, например Anemic Data Model);
    - способы контроля версий схемы реляционной БД - миграции, source control для триггеров и хранимых процедур (если они есть), политики обновления схемы вместе с выкатыванием новой версии ПО;
    - формирование тестовых данных в тестовых базах;

    Вот если сможете по этим вопросам проконсультировать, то разработчикам останется только подучить SQL и конкретную ORM, если будете использовать.
    Ответ написан
    5 комментариев
  • Какая есть хорошая книга c примерами по проектированию базы на SQL с упором на MySQL, PostgreSQL?

    Советую ERWin (коммерческий) и Oracle Data Modeler (бесплатный), а из книг возьмите Дейта для начала.
    Ответ написан
  • Когда набор связанных данных можно считать базой данных?

    В очень широком смысле БД можно считать массив данных, о структуре которого у вас достаточно информации для выполнения необходимых вам обработок, выборок и, вообще, операций. Например, если вы смотрите на бинарник в HEX-редакторе, и даже представления не имеете, что там - видео, картинка, или же записи о сотрудниках предприятия (ну или "догадываетесь" что там, но все же не имеете в распоряжении формальных и четких правил обработки этого набора байт), то это не база данных. Если же вы знаете, что в первых 4-х байтах у вас количество записей, а дальше - сами записи о сотрудниках, длиной 150 байт каждая, и вы знаете, где в этой записи нужные вам ФИО и зарплата - то это уже простейшая БД.
    Важно также, чтобы эти данные в той или иной степени отражали реальный мир: это могут быть актуальные данные, архивные (исторические) данные, но так или иначе вам должно быть известно (!), как эти данные соотносятся с реальностью. Даже если это тестовые данные, сгенерированные случайным образом - вам это должно быть известно. Иначе невозможно понять, можете ли вы в реальной системе принимать решения на основе этих данных, или нет.
    Конечно в современном мире файлик с записями "базой" обычно не называют, поэтому есть и другие критерии, например, упомянутая вами связность, и возможность ее реализации. Кроме того, если говорить о системе управления БД, то у нее должен быть формальный интерфейс для выполнения запросов по обработке данных - выборок, добавления и пр.
    Кстати, на вопрос проще ответить, если вы укажете конкретную модель БД - реляционную, объектную, или, например, документную. При введении модели вводятся и правила, которым должны удовлетворять данные, чтобы называться Базой данных.
    Ответ написан
    3 комментария
  • Отличаются ли быстротой выполнения данные запросы?

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

    $what откуда берется-то? такое ощущение, что именно там оказалось "smellyshovel", непонятно зачем правда, т.к. эта ошибка явно при попытке выполнить select.
    Ответ написан
    4 комментария
  • MS SQL (Windows) репликация/синхронизация, какую архитектуру использовать?

    Попытаюсь сократить ваш текст: для одних таблиц вам нужна репликация master-master, для других - master-slave, если конечно я правильно понял. Давайте обсудим вот это:
    > Репликация MS SQL - очень сложен в настройке
    Ну сложен видимо потому, что поддерживает много различных сценариев. Почему решили, что свой велосипед будет работать лучше? Тем более вы ж не СУБД выбираете, она у вас уже установлена и работает.
    Есть конечно и сторонний софт, например www.symmetricds.org, но весьма вероятно все шишки от его использования разгребовать вам же.
    Ответ написан
    4 комментария
  • Как в триггерах ссылаться на таблицы и поля этих таблиц?

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

    Таблица post_category(post_id, category_id), вся запись - первичный ключ, post_id - внешний ключ на post.id, category_id - внешний ключ на category.id. Наличие записи (62, 8) в такой таблице означает, что посту 62 присвоена категория 8. Чтобы вытащить все категории поста - делаете select category_id from post_category where post_id = , все посты в категории - select post_id from post_category where category_id = .
    Ответ написан
    Комментировать
  • Объясните, пожалуйста, что означают строчки sql запроса в h2 database?

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

    Если не работают операторы, которые должны работать, вполне вероятно проблема с типом данных. Какой сейчас тип данных у поля 'Date'? Не строка, случаем?
    И давайте для начала избавимся от PHP в этом вопросе и добьемся выполнения самого SQL-запроса.
    Ответ написан
  • Как происходит блокировка данных при выполнении транзакции?

    Нет, звучит не глупо, а вполне разумно. Эта проблема (что видно из других параллельных транзакций) называется изоляцией транзакций.
    Начните с чтения общих разъяснений, и конкретно о MySQL.
    Ответ написан
    1 комментарий
  • Как в mysql сделать уникальный индекс при таком условии?

    Быть очень просто: выпиливаем поле is_main, т.к. оно вносит избыточность, за которой надо следить (собственно, ваше условие, что только одна запись может иметь is_main, равное 1). Вместо этого впиливаем таблицу main_data (назовите как считаете верным), такой структуры: (item_id, id), поле item_id - первичный ключ, плюс вся пара является внешним ключом на my_table. Итого, у вас две таблицы одинаковой структуры (id, item_id). Однако в первой (которая my_table) у вас ключ (id), т.к. может быть несколько таких записей на один item_id, а во второй (main_data) у вас ключ (item_id). Во вторую таблицу вы сможете вставить максимум один элемент для заданного item_id (может правда такой записи не быть вообще, это придется контроллировать в коде). Кроме того, за счет предложенного внешнего ключа вы не вставите в main_data элемент, которого нет в my_table.
    Ответ написан
    Комментировать
  • Как реализовать папки и подпапки на php?

    Я вот себе в закладки положил, и вам советую:

    stackoverflow.com/questions/4048151/what-are-the-o...

    Лучший известный мне список способов хранения иерархических данных в РСУБД.
    Ответ написан
    Комментировать
  • Как получить 2 таблицы в хранимой процедуре в SQL Server?

    Nipheris
    @Nipheris Куратор тега C#
    А какова цель использования хранимой процедуры только для получения данных? Я понимаю вы бы делали запросы на модификацию с добавлением логики, чтобы все это выполнить на стороне БД, а выборку-то зачем? Если есть конкретные причины, укажите, и подумаем как лучше сделать.
    Ответ написан