Ответы пользователя по тегу SQL
  • Ошибка "Can't write CLR type System.String with handler type Int32Handler", что делать?

    Nipheris
    @Nipheris Куратор тега C#
    drschool_Data.command.Parameters.Add(new NpgsqlParameter("value4", NpgsqlDbType.Integer)); // тут Integer
    ...
    string selectedPlace = place.SelectedItem.ToString();
    drschool_Data.command.Parameters[3].Value = selectedPlace; // тут String
    ...
    Ответ написан
    1 комментарий
  • JSON в базе данных это норма для реляционных баз данных?

    Насколько плохой практикой является использование JSON в реляционных базах данных (это строго запрещено, иногда разрешается или это хороший тон)?

    Настолько же, насколько и хранение картинок, а также текстов. Ну двухгиговое JSON-полотно наверное не стоит хранить, ну в остальном требования такие же, как ко всему остальному что хранится в реляционной БД:

    Значение атрибута должно быть атомарным с точки зрения запросов к БД. И то это касается таких СУБД, которые JSON не поддерживают. Если СУБД поддерживает JSON - тогда только документация к СУБД ответит тебе, что там можно, а что - нет. Если значение неатомарно с точки зрения запросов - тогда нужно будет постоянно его собирать-разбирать, да и индексы нужные не факт что получится построить.

    Но в реляционных всё странно — сам принцип реляционных баз данных говорит, что для одного поля строго одно значение

    А тут я задам вам каверзный вопрос - строка это одно значение или нет? Почему это мы решили, что можно сохранить в атрибут строку? Я требую посимвольного разбития! Вам не приходило в голову, что сначала нужно крепко подумать над понятием "одно значение"? Что это вообще значит? А если хранится число с плавающей точкой - это одно значение или два?
    Ответ написан
    Комментировать
  • Как проще всего поднять SQL базу с готовым API?

    OData?
    Ответ написан
    Комментировать
  • Можно ли написать хранимую процедуру для SQL на другом языке (Например С++)?

    В MS SQL можно писать хранимку на любом дотнетовском языке (например, на Шарпе). Чтобы SQL Server нашёл хранимую процедуру достаточно выполнения указанных в документации требований.

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

    https://dev.mysql.com/doc/refman/5.7/en/views.html
    MySQL supports views, including updatable views. Views are stored queries that when invoked produce a result set. A view acts as a virtual table.

    Вообще гуглите про представления (views) и в частности про материализованные представления (materialized views), это боольшая тема про зависимые таблицы и их согласования.
    The process of setting up a materialized view is sometimes called materialization. This is a form of caching the results of a query, similar to memoization of the value of a function in functional languages, and it is sometimes described as a form of precomputation. As with other forms of precomputation, database users typically use materialized views for performance reasons, i.e. as a form of optimization.
    Ответ написан
    2 комментария
  • Как лучше построить архитектуру БД, если планируется поиск по нескольким видам/типам товаров?

    Вы столкнулись со стандартной задачей построения каталога - наборы характеристик для разнородных объектов, причём как я понимаю могут постоянно появляться новые типы объектов. Эта задача решается либо с помощью EAV, если оставаться в рамках реляционных баз, либо же путём хранения каталога в документной базе вроде MongoDB. Также рассмотрите вариант с использованием JSON/XML колонок в вашей РСУБД, если таковые поддерживаются.
    Ответ написан
    2 комментария
  • Какие ресурсы необходимы для увеличения скорости работы с большой таблицей sql?

    При миллионе записей 1 секунда на подсчёт количества??

    Да у вас вообще индексы есть на эту таблицу и колонку id?

    О каких аппаратных ресурсах может идти речь, научитесь СУБД пользоваться.
    Ответ написан
    4 комментария
  • В каких случаях лучше использовать NoSQL, а в каких SQL?

    Вот вам развёрнутый ответ.
    Пользовался NoSQL и SQL

    Не могли вы пользоваться NoSQL, вы пользовались какой-то конкретной моделью данных и конкретной СУБД.
    какую БД лучше использовать

    Ни NoSQL ни SQL это ни БД, ни СУБД.
    Был бы признателен за ссылку на статью или развёрнутый ответ, чтобы в будущем я мог при проектировании проекта сразу определится с выбором базы данных.

    В формате "ответ на Тостере" невозможно сравнить существующие сейчас модели данных и уж тем более дать советы по выбору СУБД. Начните с другого: оставьте историко-маркетологический термин "NoSQL" в стороне и начните с рассмотрения реальных моделей данных и их популярных реализаций:
    - колоночная СУБД;
    - хранилище "ключ-значение";
    - документно-ориентированная БД;
    - графовая БД;
    Ответ написан
    2 комментария
  • Как структура баз данных эффективнее: много записей, много таблиц или много баз?

    Безусловно, БД проектируются так, чтобы лучше всего обрабатывать большое количество сущностей в малом количестве "контейнеров" - много записей в небольшом числе таблиц, много документов в небольшом числе коллекций и т.д.

    5 миллионов и даже 100 миллионов записей для нормальной СУБД это вполне адекватная нагрузка (до 1 миллиона - это вообще ни о чём). Как уже заметил Петр , ГОРАЗДО важнее то, какие индексы вы добавите.

    Схемы и таблицы должны добавляться исходя из нужд приложения, например при добавлении новых фич. Базы данных должны создаваться исходы из административных нужд - ограничение доступа, политика резервного копирования и т.д. 5, 10, и даже 50 БД на одном сервере это нормально (если на это есть основания), а вот 500 тысяч - это уже ни в какие ворота.
    Ответ написан
    Комментировать
  • Как защитить запрос UPDATE от SQL-иньекций в SQLite?

    https://www.sqlite.org/c3ref/prepare.html

    Часто такое называют preapred statement или prepared query, так что гуглить полезно еще и по этим запросам).
    А какой плагин-то?
    Ответ написан
    Комментировать
  • Где найти готовые шаблоны баз данных?

    Если речь идёт о реляционной БД, то вот шаблон правильной базы данных: нормальная форма. По мере наработки опыта по проектированию БД, эти формальные правила превратятся в интуицию. Сейчас вам достаточно понять, от чего вас оберегает соблюдение нормальных форм.
    Ответ написан
    Комментировать
  • SQL. Нужно ли создавать отдельную таблицу?

    tihhanovski вам дело говорит. Это полная лажа - таблицы Child и Parent. В чем их смысл? Каждая таблица (т.е. отношение, говоря математическим языком) - эти некий факт, который может быть истинным для некоторой комбинации атрибутов (и тогда запись в таблице существует), либо не быть истинным (и тогда записи в таблице нет). В чем суть фактов "Ребенок" или "Родитель"? И в том и в другом случае это человек. Т.е. для хранения сведений о человеке нужна только одна таблица, и это таблица Person.

    Другое дело, что вы хотите еще хранить сведения о том, кто кому приходится родителем. Поля ParentId в таблице Person будет недостаточно, т.к. зарегистированный родитель может быть один, а может быть двое (или даже ни одного, если в вашем детсаду могут быть сироты). Можно конечно завести два поля - первый родитель и второй родитель, и давать возможность ставить туда NULL, но не факт что это лучшее решение. Вот для целей хранения связи родитель-ребенок (обращаю ваше внимание, что именно СВЯЗИ родитель-ребенок, а не отдельных сущностей "родитель" и "ребенок") можно завести отдельную таблицу вида Parent(ChildId, ParentId), где оба поля - это внешние ключи в таблицу Person и оба поля формируют составной первичный ключ. Тогда вы сможете спокойно заносить и детей и родителей в одну таблицу, а затем связывать их родственными отношениями - у одного ребенка может быть 0, 1 и более родителей (ограничение в 2 человека нужно будет контролировать на уровне приложения), и каждый родитель может иметь любое число детей.

    P.S. По поводу того, что данные разные в Child и Parent - дело не в том, что ФИО надо выносить, а в том, что надо отделить общие данные о человеке, и оставить их в таблице Person (кстати, пол человека вы наверняка захотите хранить в Person), а различающиеся данные разместить в других таблицах, например МестоРаботы и МедицинскиеСведения. То, что у родителей есть место работы, а у детей - мед. сведения, это, грубо говоря, стечение обстоятельств. Завтра вам скажут, что медицинскую информацию и для родителей тоже нужно хранить (например, если они посещают здание детсада). Один-два джоина - это более чем адекватный запрос в нормальной нормализованной БД.
    Ответ написан
  • Какие есть архитектурные паттерны без ORM для ASP.NET MVC?

    Сложно посоветовать вам паттерн, т.к. вы в общем-то так и сказали в чем ваша проблема. Непонятно, для решения какой архитектурной задачи вы подбираете паттерн.

    Вы указали, что уже используете Репозиторий. Раз так, то у вас и так должно быть все хорошо с абстрагированием от слоя получения данных - вы можете реализовать репозиторий так, как вам нужно, в том числе и SQL-запросами.

    Даже если вы не хотите ORM целиком, вы возможно захотите часть из её функционала реализовать самостоятельно для удобства. Например, вы вероятно все-таки захотите иметь Identity Map, что ваши объекты (которые будет отдавать ваш Репозиторий, реализованный ручными SQL-запросами) действительно были объектами, а не записями. Или даже какой-нибудь Lazy Load.

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

    Оправдано ли будет сделать первичным ключем гос.номер, т.е. , допустим, поле nchar(6)?

    Оправдано, если а) поле фиксированной длины - неважно, строка это или число; б) вы действительно уверены в том, что значения будут уникальны, в том числе во времени. Есть предметные области, где это действительно так, но далеко не везде.
    Если строка переменной длины, первичным ключом её лучше не делать, но можно сделать полнотекстовой поиск по ней, если он нужен.

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

    Nipheris
    @Nipheris Куратор тега C++
    Библиотеку для абстрагирования работы с разными СУБД могу посоветовать такую: https://github.com/SOCI/soci , только это не ORM, а именно абстракция от конкретной СУБД и конкретной клиентской библиотеки. Вообще под плюсами ORM не особо живут и плодятся ввиду принципиального отсутствия рефлексии в языке. Какие-то были на базе Qt (MOC как раз и обеспечивает для них наличие мета-объектов), но они слабо развиваются.

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

    select route.name, departure_city.name, arrival_city.name
    from
        route
        join city departure_city on route.departure_city_id = departure_city.id
        join city arrival_city on route.arrival_city_id = arrival_city.id
    Ответ написан
    Комментировать
  • Как побороть foreign key constraint violation в MySQL?

    dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key...

    If ON UPDATE CASCADE or ON UPDATE SET NULL recurses to update the same table it has previously updated during the cascade, it acts like RESTRICT. This means that you cannot use self-referential ON UPDATE CASCADE or ON UPDATE SET NULL operations. This is to prevent infinite loops resulting from cascaded updates.


    Не имейте привычки рассчитывать на ограничения и их поведение при разработке приложения. Обновите все ключи сами - и в дочерней, и в родительской записи.
    Ответ написан
    Комментировать
  • Хранение данных полигонов от карт в базе?

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

    Как правильно разделить работу СУБД и PHP?

    Есть очень простой принцип.

    СУБД - это подсистема, которая хранит и извлекает данные, а приложение (на PHP или на чем угодно) - их обрабатывает и модиифицирует, если нужно.
    СУБД архитектурно (и физически) "ближе" к данным. Одна из важнейших задач СУБД - выбрать из всего объема БД только нужные сейчас данные. Именно на уровне СУБД нужно производить максимум фильтраций. У нее есть все нужное для этого - индексы и прочие хитрые структуры данных.

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

    Поэтому вывод такой: выбирайте как можно меньше записей и столбцов/атрибутов в запросе к БД (т.е., например, никаких * в плановых запросах), и делайте как можно больше работы с ними на уровне приложения (настолько, насколько удается соблюдать требуемые гарантии целостности).
    Под "как можно меньше записей" я имею в виду делать запрос максимально конкретным и узконаправленным, но достаточным для выполнения текущей задачи.
    Ответ написан
    7 комментариев