Усложненная (но более жизненная) задача про лайки
В воображаемой социальной сети есть Пользователи (id, имя), Фото (id, название, автор) и Комментарии К Фото (id, текст, автор, к какому Фото относится). Необходимо добавить возможность для Пользователей ставить лайки другим Пользователям, Фото или Комментариям К Фото. Нужно реализовать такие возможности:
- пользователь не может поставить 2 лайка одной и той же сущности (например одному и тому же Фото)
- пользователь может отозвать лайк
- необходимо иметь возможность посчитать число полученных сущностью лайков и вывести список Пользователей, поставивших лайки
- в будущем могут появиться новые виды сущностей которые можно лайкать
Для начала, нужно решить задачу без оглядки на производительность. Очень желательно следовать принципам нормализации и помечать связи внешними ключами (а также на уровне Бд предотвратить возможность повторной отправки лайка). Далее, можно дополнить решение комментариями по поводу оптимизаций производительности.
Тут есть несколько вариантов решения.
Создание базы данных в SQL Server Management Studio
Первое, что Вам нужно сделать, это запустить среду SQL Server Management Studio и подключиться к SQL серверу.
Затем в обозревателе объектов щелкнуть по контейнеру «Базы данных» правой кнопкой мыши и выбрать пункт «Создать базу данных».
В результате откроется окно «Создание базы данных». Здесь обязательно нужно заполнить только поле «Имя базы данных», остальные параметры настраиваются по необходимости. После того, как Вы ввели имя БД, нажимайте «ОК».
Если БД с таким именем на сервере еще нет, то она будет создана, в обозревателе объектов она сразу отобразится.
Как видите, база данных создана, и в этом нет ничего сложного.
На правах профессии «🔥Основы SQL для анализа данных🔥»
На 1 час теории — 5 часов практики. Участвуете в вебинарах, живых 60-минутных видеоуроках и после каждого занятия выполняете задание. Уроков можно пересматривать в любое удобное время.
Работа в команде. Разбираете реальные задачи на командных мастер-классах под руководством эксперта. Делитесь опытом, получаете поддержку и полезные связи в профессиональной среде.
Кому подойдет курс
- Новичкам в IT
- Руководителям
- Маркетологам
- Начинающим аналитикам
- Начинающим разработчикам и тестировщикам
- Проводить аналитические исследования и находить инсайты
- Фильтровать, сортировать, группировать и объединять данные из разных таблиц
- Писать запросы к базам данных
- Вычислять показатели из большого объема информации
- работа с нативными данными
- Преобразование данных
- Основы администрирования БД
- Аналитический проект в SQL
Как работают связи в базе данных
Связи между таблицами показывают, как одни данные могут зависеть от других. В зависимости от того, как вы настроите связи, база может получать разные результаты и искать данные. В связи может участвовать одна запись, а может сразу много.
Один к одному. Это самый простой вид связи, который говорит: одной записи из этой таблицы соответствует только одна запись из другой таблицы. Если мы сделаем новую таблицу с фотографиями клиентов, то каждой фотографии будет соответствовать только один клиент и наоборот.
Один ко многим. Когда у нас есть таблица с клиентами и таблица с их покупками, тут работает связь «один ко многим». Это значит, что у нас одной записи о клиенте соответствует несколько записей об их покупках, например, если он их сделал в разное время. Благодаря этой связи мы можем вывести все покупки для каждого клиента в отдельности.
Ещё пример — художники и картины. Каждая картина принадлежит только одному художнику, но одному художнику может принадлежать много разных картин.
Многие ко многим. А вот это хитрая связь — для неё нужна отдельная таблица. Смысл такой: мы делаем промежуточную таблицу, в которой соединяем данные из одной таблицы с данными из другой. Получается, что в новой таблице как бы нет данных — в ней только связи.
Допустим, вы ведёте свой список дел в ежедневнике, где можно ставить метки для дел. Метки помогают понять, что за дело перед вами, и выглядят примерно так: «в дороге», «позвонить», «на неделе», «подписать у Иваныча» и «за компьютером». Их можно назначить любой задаче — одну метку, две или все сразу. Получается так:
- одна метка может стоять на множестве разных задач
- у одной задачи может быть много разных меток.
Это значит, что мы связали множество меток со множеством задач и теперь можем искать одно через другое.
Ошибки при работе с Postgres
Вы хотите удалить что-то из таблицы TABLE_NAME, но получаете ошибку
ERROR: update or delete on table «TABLE_NAME
violates foreign key constraint «fk_ANOTHER_TABLE_SOME_id»
on table «ANOTHER_TABLE»
DETAIL: Key (id)=(SOME_ID) is still referenced from
table «ANOTHER_TABLE».
SQL state: 23503
Эта ошибка возникает в случае, когда Вы пытаетесь удалить что-то из реляционной базы
данных и это что-то является ключом для элементов из другой таблицы.
Чтобы её обойти нужно удалить элементы другой таблицы (ANOTHER_TABLE)
которые ссылаются на ту, из которой Вы хотите удалить (TABLE_NAME).
Вычислить эти элементы можно по значению
Key (SOME_ID)
Желательно убедиться, что все Ваши действия осознаны и не представляют угрозы базе данных.
Некоторые нюансы языка SQL
Регистр символов.Как ты мог заметить мы писали команды в верхнем регистре. На самом деле это не обязательно, язык SQL не чувствителен к регистру символов. А потому команды можно вводит как угодно: SELECT select Select — это всегда одна и та же команда. Потому верхний регистр в командах и нижний в названиях столбцов и таблиц используется просто для удобства. Но не забывай, что названия таблиц и столбцов к регистру чувствительны т.е. users_nick и USERS_NICK — это две разных таблицы.
ПробелыВсе лишние пробелы в SQL отбрасываются. Потому, например, одна инструкция может быть записана на нескольких строках. Можешь использовать пробелы там где тебе удобней, это принципиально не на что не влияет.
Комментарии Конечно в SQL есть комментарии. Символ решетки # поставленный в начале строки превратит её в комментарий. Если нужно создать многострочный комментарий то он должен начинаться с символов /* и заканчиваться */
На этом наше знакомство с базами данных и SQL можно считать оконченным. Конечно же в этой статье я дал только самые базовые знания. Но их более-менее достаточно для понимания процессов происходящих с базами данных и самостоятельного более углубленного изучения SQL и всего что с ним связанно, в том числе изучения sql-инъекция. Чем, кстати, мы займемся в следующих статьях на эту тему, а потому не забывай возвращаться к нам.
Твой Pulse.
1.1 Описание предметной области. Постановка задачи
Еще совсем недавно использование Excel в качестве основного инструмента регистрации и обработки информации было обычным делом и даже крупные компании делились опытом и «фишками» использования Excel для ведения данных о сотрудниках, расчета заработной платы, премий, продаж, сведениях о клиентах и т.д. Сейчас же многие переходят на базы данных (далее – БД) и различные программы, использующие SQL как основной инструмент работы с БД. Что же это меняет? Почему использование Excel перестало быть таким популярным?
Первое преимущество использования SQL это, конечно же, возможность работы с БД несколькими пользователями одновременно, без риска «затереть» данные друг друга.
Оперативность работы. Ни для кого не секрет, что при значительном объеме данных, скорость работы Excel падает в несколько раз. А так же при использовании более сложного функционала, форм или макросов, скорость обработки функций так же падает. При работе с БД через прикладные программы (в основном использующих клиент-серверную архитектуру) запросы уже оптимизированы, и потеря скорости незначительна для конечного пользователя.
Простота. Конечно же, Excel – превосходный инструмент. Но, чтобы использовать все его возможности и оптимально работать с данными, необходимо иметь специфичные знания. Это превращает конечных пользователей в программистов, заставляя их разбираться с тонкостями работы макросов, вместо работы с данными. Прикладные программы же изначально создавались для удобства использования конечными пользователями без технических знаний. Это позволяет значительно сэкономить человеческий ресурс.
Это основные, но далеко не все преимущества перехода на прикладные программы с Excel. Конечно же, в некоторых случаях использование Excel остается конкурентным вариантом. И, при наличии соответствующих специалистов, Excel может полностью заменить прикладные программы, работающие с БД.
База данных – это организованный (упорядоченный) набор структурированной информации или данных, которые хранятся в электронном виде в компьютерной системе. Обычно, БД управляется с помощью системы управления базой данных.
Итак, перед нами стоит задача создать удобный инструмент для ведения домашней библиотеки с использованием СУБД. Для этого нам нужно будет:
- Придумать и настроить интерфейс для ввода данных;
- Создать структуру БД;
- Настроить БД;
- Определить список результатов (отчетов), которые мы хотим получать.
В качестве источника данных могут быть использованы следующие опции:
- Веб-интерфейс для записи данных в библиотеку;
- Загрузка данных из Excel с помощью стандартного фукционала СУБД;
- Ручной ввод в БД с помощью скриптов.
Есть и другие способы заполнения БД, но я предлагаю сконцентрироваться на этих трех, как на основных способах реализации поставленной задачи. Конечно, последние два пункта – это скорее привилегии администратора, либо начальная загрузка данных в БД, нежели ежедневное обновление информации. Наиболее удобным для постоянного использования является первый способ – веб-интерфейс. Там же можно будет настроить получение тех или иных отчетов.
Что же может понадобиться пользователю такой БД? Какие отчеты и результаты он бы хотел видеть на выборке? Предлагаю определить основные характеристики, которые будут описаны для книг:
- Автор;
- Название;
- Жанр и поджанр;
- Язык, на котором написана книга;
- Основной цвет обложки;
- Факт прочтения.
Соответственно, в качестве результата может быть отчет, отфильтрованный по одному или нескольким полям характеристик. И, в качестве стандартного отчета – все книги в библиотеке, которые еще не были прочитаны.
Т.к. библиотекой пользуюсь я одна – создавать многопользовательскую версию БД я не вижу смысла. Все действия будут выполняться одним единственным пользователем, он же – администратор БД.
Задачей курсовой работы является: создание удобного инструмента для ведения настроенной базы данных для домашней бибилиотеки и с возможностью выгружать необходимые отчеты из БД.
1.1 Общие сведения
В библиотеке основными данными являются данные: книги (инвентарный номер,
автор, название, код по классификатору, год издания, объявленная стоимость),
посетители (идентификационный номер, фамилия, имя, отчество, год рождения,
домашний адрес, телефон), выдача книг (номер записи, номер книги, номер
посетителя, дата выдачи, дата возврата), платные услуги (идентификационный
номер, название услуги, цена), выручка по платным услугам (идентификационный
номер, номер услуги, номер клиента, количество, итого), инвентарь
(идентификационный номер, название, объявленная стоимость). В 1 главе расписываются
основные сведения о предметной области с приведением конкретных примеров,
создается перечень хранимой информации с определением типов полей, выделяются
справочные и оперативные данные, создаются предполагаемые запросы к БД и
делаются выводы по разделу.
Установка
Если для своей работы вы используете программную среду OpenServer, то этот раздел можно смело пропустить, так как в состав OpenServer уже входит свежая версия MySQL.
Последняя версия MySQL доступна для загрузке по ссылке: https://dev.mysql.com/downloads/mysql/
На этой странице следует выбрать «MySQL Installer for Windows» и нажать на кнопку «Download» для загрузки.
В процессе установки запомните директорию, куда вы устанавливаете MySQL (скрывается под ссылкой «Advanced options»).
На шаге «Accounts and Roles» установщик потребует придумать пароль для доступа к БД (MySQL Root Password) — обязательно запомните или запишите этот пароль — он вам ещё понадобится.
MySQL
Существует множество различных реляционных СУБД. Самая известная СУБД — это Microsoft Access, входящая в состав офисного пакета приложений Microsoft Office.
Нет никаких препятствий для использования в качестве СУБД MS Access, но для задач веб-программирования гораздо лучше подходит альтернативная программа — MySQL.
В отличие от MS Access, MySQL абсолютно бесплатна, может работать на серверах с Linux, обладает гораздо большей производительностью и безопасностью, что делает её идеальным кандидатом на роль базы данных в веб-разработке.
Подавляющее большинство сайтов и приложений на PHP используют в качестве СУБД именно MySQL.
Вставка данных в таблицу и их обновление
После создания таблицы Products в нее можно вставлять данные с помощью инструкции INSERT. После вставки данных содержимое строки изменяется с помощью инструкции UPDATE. Предложение WHERE предназначено для ограничения числа строк, изменяемых в процессе выполнения инструкции UPDATE до одной строки. Чтобы ввести следующие данные, потребуется четыре инструкции.
ProductID | ProductName | Цена | ProductDescription |
---|---|---|---|
1 | Clamp | 12,48 | Workbench clamp |
50 | Screwdriver | 3,17 | Flat head |
75 | Tire Bar | Tool for changing tires. | |
3000 | 3 mm Bracket | 0,52 |
Базовый синтаксис: INSERT, имя таблицы, список столбцов, VALUES, а затем список добавляемых значений. Два дефиса в начале строки означают, что строка является примечанием и текст не будет обрабатываться компилятором. В этом случае примечание описывает возможные варианты синтаксиса.
Вставка данных в таблицу
- Выполните следующую инструкцию, чтобы добавить строку в таблицу , которая была создана в предыдущей задаче.
Примечание
Если вставка выполнена, перейдите к следующему шагу.
Если вставка завершается сбоем, это может быть вызвано тем, что в таблице уже есть строка с таким ИД продукта. Чтобы продолжить, удалите все строки в таблице и повторите предыдущий шаг. удаляет все строки в таблице.
Выполните следующую команду, чтобы удалить все строки в таблице:
После усечения таблицы повторите команду на этом шаге.
- В следующей инструкции показано, как можно изменить порядок, в котором приведены параметры, изменив расположение и одновременно как в списке полей (в круглых скобках), так и в списке значений.
- Следующая инструкция показывает, что имена столбцов перечислять не обязательно, если значения перечислены в нужном порядке. Этот синтаксис является стандартным, но не рекомендуется, поскольку другим будет трудно понять ваш код. указано в столбце , так как цена этого товара пока неизвестна.
- Имя схемы указывать не обязательно, пока доступ и изменение таблицы осуществляются с помощью схемы по умолчанию. Поскольку в столбце разрешены значения NULL и значение для столбца не приведено, имя и значение столбца в инструкции могут быть полностью опущены.
Понятие реляционной СУБД
Не углубляясь в детали, можно дать такое определение: реляционной называется СУБД, использующая реляционную модель управления.
Доктор Е. Ф. Кодд в 1970 году опубликовал свою работу, где впервые было дано понятие реляционной модели. В публикации описывался некий математический аппарат, структурирующий данные и оперирующий ими. Основная идея состояла в представлении любых данных в виде абстрактной модели.
В соответствии с предложенной концепцией отношение между объектами (relation) представляет собой некую таблицу с данными. При этом существуют атрибуты (или признаки) отношения, которые соответствуют столбцам рассматриваемой таблицы. Сами данные предстают в виде наборов этих признаков и формируют записи (кортежи). Последние в свою очередь соответствуют табличным строкам.
Значения атрибутов каждого кортежа входят в домены, представляющие собой определенные наборы данных и задающие пределы допустимых значений.
Разберем это на примере. Существует домен «Неделя», в котором содержатся значения всех дней недели («Понедельник», «Вторник», …, «Воскресенье»). Атрибут, имеющий эти значения, называется «ДеньНедели». Тогда соответствие этого атрибута домену автоматически означает, что в одноименном столбце должны содержаться только перечисленные значения. Любые другие символы и группы символов недопустимы.
Бесплатный онлайн-интенсив
Ваш Путь в IT начинается здесь
Подробнее
Также запрещается ввод сразу нескольких значений. Кроме того, требуется соблюдение условия атомарности. Иначе говоря, значения нельзя объединять друг с другом и разбивать их на более мелкие составляющие, сохранив при этом смысл. В случае присутствия в ячейке атрибута сразу двух значений и более (например, «Вторник» и «Среда») атомарность теряется. Тут можно выделить две части, сохранив смысл, но при дальнейшем разбитии слов на отдельные символы исходный смысл также утратится.
Другое важное свойство отношений в СУБД — замкнутость операций. Оно заключается в том, что любая операция над отношением порождает новое отношение
Благодаря этому свойству программисты SQL получают предсказуемые результаты математических действий. Также становится возможным представление операций в виде абстрактных выражений, обладающих разными уровнями вложенности.
Отредактировать запись
Если вы случайно ввели значение с опечаткой, используйте команду UPDATE, чтобы отредактировать конкретное поле:
UPDATE название_таблицы SET название_столбца = “новое_значение” WHERE название_столбца = “значение“;
После SET укажите название столбца, в котором хотите изменить значение. А после WHERE — название какого-то другого столбца из этой же строки. Это нужно, чтобы помочь MySQL-серверу понять, куда именно вписывать новое значение.
Подставим реальные значения, чтобы исправить опечатку в слове Casal в названии второй книги:
UPDATE books SET title = "The Casual Vacancy" WHERE id = "2";
А после снова просмотрим таблицу и убедимся, что опечатки больше нет:
Как сделать скрипт бд в sql
Создание базы данных из скрипта, команда CREATE DATABASE в SQL Server 2005, автоматическая генерация скрипта для создания базы данных
Очень часто рабочие базы данных создаются при помощи команды Transact — SQL CREATE DATABASE . Обычно эта команда помещается в скрипт, который, помимо создания самой базы данных, выполняет и другие операции, например, настройку параметров базы данных и создание в ней объектов. Полный синтаксис команды Create Database здесь приводиться не будет: это заняло бы несколько страниц, и пришлось бы полностью дублировать документацию. Вместо этого мы расскажем о том, как такой скрипт можно создать в автоматизированном режиме.
Вместо того чтобы писать команду Create Database вручную (это может быть достаточно трудоемким занятием, кроме того, всегда есть риск допустить ошибки), ее можно сгенерировать автоматически. Это можно сделать двумя способами: сгенерировать скрипт для существующей базы данных и воспользоваться шаблоном редактора кода.
Первый вариант (с генерацией скрипта) особенно удобен тогда, когда у вас уже есть оттестированная база данных на сервере, который использовался для разработки, и вы хотите разместить ее копию (возможно, включая объекты) на другом сервере или на множестве серверов (например, в филиалах). Создать скрипт можно двумя способами. Более простой и менее функциональный вариант выглядит так:
1. Откройте SQL Server Management Studio и подключитесь к серверу, на котором расположена интересующая вас база данных.
2. Раскройте контейнер Databases .
3. Щелкните правой кнопкой мыши по объекту нужной базы данных и в контекстном меню выберите Script Database As | Create to | New Query Editor Window (Отскриптовать базу данных как | Создать | Новое окно редактора кода) (как вариант, созданный скрипт можно также сохранить в файле (пункт контекстного меню File ) или поместить в буфер обмена (пункт Clipboard )).
Однако при этом вы создадите только скрипт на создание самой базы данных и настройку ее параметров. Если вам нужно также поместить в скрипт команды на создание объектов баз данных (таблиц, представлений и т. п.), придется использовать другой способ:
1. Точно так же откройте контекстное меню нужной базы данных.
2. В контекстном меню выберите Tasks | Generate Scripts (Задачи | Сгенерировать скрипты).
После этого откроется мастер генерации скриптов Generate SQL Server Scripts Wizard . На страницах этого мастера вы можете выбрать множество параметров генерации скрипта: для какой базы данных он создается, нужно ли помещать в скрипт команды на создание всех объектов в этой базе данных или вы хотите поместить в скрипт команды только на создание объектов определенного типа (таблиц, представлений, индексов, ограничений целостности, триггеров и т. п.), скриптовать ли пользователей базы данных и разрешения, которые им предоставлены на объекты, помещать в команды на создание проверку существования объектов с такими же именами, генерировать ли скрипты на удаление объектов и т. п.
Единственное, что, пожалуй, не хватает в этом мастере — возможности одновременно генерировать команды INSERT для загрузки данных. Но для создания базы данных с загруженными данными придется использовать другие способы, которые будут рассмотрены в следующем разделе.
Второй способ упростить создание скрипта Create Database — воспользоваться шаблоном редактора кода. Выглядит эта операция так:
1. Откройте SQL Server Management Studio и в меню File выберите New | File .
2. В окне New File (Новый файл) в списке Categories (Категории) выберите категорию SQL Server Query | Database (Запрос SQL Server | База данных) и в списке справа выберите подходящий шаблон для создания базы данных (самый простой из предлагаемых вариантов называется create database ).
3. Шаблон будет загружен в окно редактора кода SQL Server Management Studio . Его можно доработать вручную, а можно воспользоваться специальным окном для заполнения значений параметров. Это окно можно открыть при помощи меню Query | Specify Values for Template Parameters .