<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Просто о системном анализе</title><generator>teletype.in</generator><description><![CDATA[Просто о системном анализе]]></description><image><url>https://img2.teletype.in/files/93/06/93065d6f-b822-4fa8-b0b1-99965959c307.png</url><title>Просто о системном анализе</title><link>https://teletype.in/@sys-analyst</link></image><link>https://teletype.in/@sys-analyst?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/sys-analyst?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/sys-analyst?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sun, 24 May 2026 18:15:17 GMT</pubDate><lastBuildDate>Sun, 24 May 2026 18:15:17 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@sys-analyst/auth</guid><link>https://teletype.in/@sys-analyst/auth?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst</link><comments>https://teletype.in/@sys-analyst/auth?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst#comments</comments><dc:creator>sys-analyst</dc:creator><title>Идентификация, аутентификация и авторизация</title><pubDate>Thu, 06 Nov 2025 06:54:40 GMT</pubDate><description><![CDATA[Идентификация, аутентификация и авторизация — это три последовательных этапа обеспечения безопасности.]]></description><content:encoded><![CDATA[
  <p id="6tPV"><strong><em>Идентификация, аутентификация и авторизация</em></strong> — это три последовательных этапа обеспечения безопасности. </p>
  <ul id="Gf1X">
    <li id="91sO"><strong>Идентификация</strong> — это предоставление системе своей личности (например, логина).</li>
    <li id="XNwG"><strong>Аутентификация</strong> — это подтверждение этой личности (например, паролем или кодом из СМС).</li>
    <li id="H24J"><strong>Авторизация</strong> — это предоставление пользователю прав на выполнение определенных действий после успешной аутентификации. </li>
  </ul>
  <h2 id="3jiC">Этапы процесса</h2>
  <ol id="T6S2">
    <li id="mevK"><strong>Идентификация<br /></strong>Пользователь сообщает системе, кто он такой.</li>
    <ul id="mtty">
      <li id="1CHW"><strong>Пример:</strong> Ввод логина или адреса электронной почты.</li>
      <li id="7oIN"><strong>Назначение:</strong> Система узнает, с каким пользователем предстоит работать.</li>
    </ul>
    <li id="2OsJ"><strong>Аутентификация<br /></strong>Система проверяет, действительно ли пользователь является тем, за кого себя выдает.</li>
    <ul id="zGxZ">
      <li id="hob4"><strong>Пример:</strong> Ввод пароля, PIN-кода, предоставление биометрических данных.</li>
      <li id="0GvV"><strong>Назначение:</strong> Подтверждение подлинности введенных данных.</li>
    </ul>
    <li id="bLnD"><strong>Авторизация<br /></strong>Система определяет, какие действия пользователь имеет право совершать.</li>
    <ul id="3Jxo">
      <li id="GGsE"><strong>Пример:</strong> Доступ к чтению писем, но не к их удалению; снятие наличных, но не пополнение счета.</li>
      <li id="o2wp"><strong>Назначение:</strong> Предоставление или ограничение прав доступа к ресурсам и функциям.</li>
    </ul>
  </ol>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@sys-analyst/oop-princip</guid><link>https://teletype.in/@sys-analyst/oop-princip?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst</link><comments>https://teletype.in/@sys-analyst/oop-princip?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst#comments</comments><dc:creator>sys-analyst</dc:creator><title>Принципы ООП (объектно-ориентированного программирования)</title><pubDate>Tue, 21 Oct 2025 18:48:19 GMT</pubDate><category>Архитектура IT</category><description><![CDATA[Основные принципы объектно-ориентированного программирования (ООП) — это абстракция, инкапсуляция, наследование и полиморфизм. Эти принципы позволяют создавать более гибкий, модульный и эффективный код, моделируя реальные объекты в программе и их взаимодействие.]]></description><content:encoded><![CDATA[
  <p id="hL1p">Основные принципы объектно-ориентированного программирования (ООП) — это абстракция, инкапсуляция, наследование и полиморфизм. Эти принципы позволяют создавать более гибкий, модульный и эффективный код, моделируя реальные объекты в программе и их взаимодействие.</p>
  <h3 id="E9Sf">1. Абстракция</h3>
  <ul id="aQfz">
    <li id="p4LF"><strong>Суть:</strong> Выделение ключевых характеристик и поведения объектов, которые важны для решения конкретной задачи, и скрытие несущественных деталей.</li>
    <li id="K2EV"><strong>Пример:</strong> При использовании телевизора нам не нужно знать, как он работает внутри, достаточно знать, как управлять им с помощью пульта.</li>
  </ul>
  <h3 id="xKxZ">2. Инкапсуляция</h3>
  <ul id="ViQt">
    <li id="rABg"><strong>Суть:</strong> Сокрытие внутренней реализации объекта и предоставление доступа к его данным и методам только через определенный, контролируемый интерфейс.</li>
    <li id="O3aT"><strong>Преимущества:</strong> Это защищает данные от некорректных изменений и позволяет легко модифицировать внутреннюю структуру объекта, не затрагивая остальной код.</li>
  </ul>
  <h3 id="n9vr">3. Наследование</h3>
  <ul id="YZNz">
    <li id="Wf5t"><strong>Суть:</strong> Способность создавать новые классы (потомков) на основе существующих (родителей), перенимая их свойства и методы, но добавляя или изменяя их под свои нужды.</li>
    <li id="5rN8"><strong>Пример:</strong> Класс «Собака» может наследовать общие свойства от класса «Животное» (например, иметь имя), но добавить свои уникальные характеристики (например, лаять).</li>
  </ul>
  <h3 id="huIJ">4. Полиморфизм</h3>
  <ul id="nq3x">
    <li id="YWqh"><strong>Суть:</strong> Возможность использовать один и тот же метод для объектов разных классов, при этом каждый объект будет выполнять действие по-своему, в соответствии со своей реализацией.</li>
    <li id="90kn"><strong>Пример:</strong> Метод «издать звук» у разных животных будет вызывать разное звучание: кошка мяукать, а собака лаять.</li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@sys-analyst/togaf</guid><link>https://teletype.in/@sys-analyst/togaf?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst</link><comments>https://teletype.in/@sys-analyst/togaf?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst#comments</comments><dc:creator>sys-analyst</dc:creator><title>TOGAF</title><pubDate>Mon, 29 Sep 2025 10:17:05 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/84/e7/84e7de09-fbb6-4966-a538-fe5c8371016b.png"></media:content><category>Архитектура IT</category><description><![CDATA[<img src="https://img3.teletype.in/files/61/ba/61ba75e2-e7a3-498d-8acc-981b760749d7.png"></img>TOGAF (The Open Group Architecture Framework) — это международный стандарт и фреймворк для построения архитектуры предприятия, разработанный консорциумом The Open Group. Он предоставляет методологию, инструменты и процесс, известный как Метод разработки архитектуры (ADM), который помогает организациям согласовывать свои бизнес-цели с ИТ-системами. TOGAF поддерживает проектирование, планирование, внедрение и управление корпоративной архитектурой, используя четыре основных домена: бизнес, данные, приложения и технологии.]]></description><content:encoded><![CDATA[
  <p id="RFEq"><strong>TOGAF</strong> (<a href="https://www.opengroup.org/togaf" target="_blank">The Open Group Architecture Framework</a>) — это международный стандарт и фреймворк для построения архитектуры предприятия, разработанный консорциумом The Open Group. Он предоставляет методологию, инструменты и процесс, известный как Метод разработки архитектуры (ADM), который помогает организациям согласовывать свои бизнес-цели с ИТ-системами. TOGAF поддерживает проектирование, планирование, внедрение и управление корпоративной архитектурой, используя четыре основных домена: бизнес, данные, приложения и технологии. </p>
  <figure id="cPkR" class="m_column">
    <img src="https://img3.teletype.in/files/61/ba/61ba75e2-e7a3-498d-8acc-981b760749d7.png" width="782" />
    <figcaption>Картинка с сайта The Open Group</figcaption>
  </figure>
  <h2 id="CUew">Основные компоненты и принципы TOGAF</h2>
  <p id="IvYB"><strong>Метод разработки архитектуры (ADM)<br /></strong>Это основной процесс TOGAF, который описывает итеративный подход к созданию и управлению архитектурой предприятия. </p>
  <p id="4zbk"><br /><strong>Фреймворк контента<br /></strong>Определяет стандартные элементы и строительные блоки, используемые при описании архитектуры. </p>
  <p id="aM18"><br /><strong>Принципы модульности, масштабируемости, расширяемости и гибкости<br /></strong>Эти принципы обеспечивают комплексный подход к проектированию, позволяющий адаптироваться к изменяющимся потребностям. </p>
  <h3 id="gpvC">Четыре домена архитектуры</h3>
  <p id="S3ab"><strong>1. Бизнес-архитектура<br /></strong>Определяет стратегию предприятия, структуру управления и ключевые бизнес-процессы. </p>
  <p id="qDjG"><strong>2. Архитектура данных<br /></strong>Описывает структуру данных организации и ресурсы для управления ими. </p>
  <p id="HAoE"><strong>3. Архитектура приложений<br /></strong>Представляет собой карту корпоративных приложений, описывая их роль в бизнес-процессах и взаимодействие. </p>
  <p id="QBUV"><strong>4. Архитектура технологий<br /></strong>Описывает аппаратное и программное обеспечение, необходимое для поддержки бизнес- и ИТ-архитектуры. </p>
  <h3 id="vaji">Зачем используется TOGAF</h3>
  <p id="2TIY"><strong>1. Согласование бизнеса и ИТ</strong><br />Помогает организациям связать свои ИТ-системы и процессы со стратегическими целями бизнеса.</p>
  <p id="LnYv"><strong>2. Структурированный подход<br /></strong>Предоставляет стандартизированный подход к проектированию и управлению архитектурой.</p>
  <p id="Cfbx"><strong>3. Управление изменениями<br /></strong>Позволяет организациям эффективно управлять изменениями и адаптироваться к новым требованиям. </p>
  <p id="CVry"><strong>4. Общий язык<br /></strong>Обеспечивает общий язык и терминологию для всех участников процесса архитектуры. </p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@sys-analyst/c4</guid><link>https://teletype.in/@sys-analyst/c4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst</link><comments>https://teletype.in/@sys-analyst/c4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst#comments</comments><dc:creator>sys-analyst</dc:creator><title>Архитектура C4</title><pubDate>Mon, 29 Sep 2025 09:16:54 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/29/14/29141f06-927b-4051-bde4-06f63027592b.png"></media:content><category>Архитектура IT</category><description><![CDATA[<img src="https://img3.teletype.in/files/a2/ad/a2adfd91-51b8-4b73-ad00-c33d941a107c.png"></img>C4 — это иерархическая система диаграмм для визуализации архитектуры программного обеспечения, созданная Саймоном Брауном, которая предлагает четыре уровня детализации: Контекст, Контейнеры, Компоненты и Код. Служит для описания систем и их взаимосвязей.]]></description><content:encoded><![CDATA[
  <p id="IHis">C4 — это иерархическая система диаграмм для визуализации архитектуры программного обеспечения, созданная Саймоном Брауном, которая предлагает четыре уровня детализации: Контекст, Контейнеры, Компоненты и Код. Служит для описания систем и их взаимосвязей.</p>
  <figure id="0Edl" class="m_original">
    <img src="https://img3.teletype.in/files/a2/ad/a2adfd91-51b8-4b73-ad00-c33d941a107c.png" width="715" />
    <figcaption>Картинка из Интернета</figcaption>
  </figure>
  <p id="2hSL">Разберём каждый уровень отдельно:</p>
  <h2 id="WqOo">1. Контекст (<strong>C</strong>ontext)</h2>
  <p id="bifB">Самый общий уровень, показывающий программную систему в её окружении, взаимодействие с пользователями (людьми) и внешними системами.</p>
  <h2 id="RSUT">2. Контейнеры (<strong>Containers)</strong></h2>
  <p id="tobC">Показывает основные подсистемы (приложения, базы данных, микросервисы) внутри программной системы и их взаимодействие друг с другом).</p>
  <h2 id="FhRG">3. <strong>Компоненты (Components)</strong></h2>
  <p id="GEBO">Детализирует каждый контейнер, разбивая его на более мелкие, логически связанные функции с чётко определёнными интерфейсами.</p>
  <h2 id="bATN">4. <strong>Код (Code)</strong></h2>
  <p id="aaMk">Самый детальный уровень, на котором отображаются элементы кода (классы, интерфейсы, функции), реализующие компоненты.</p>
  <h2 id="0OkM">Преимущества модели C4</h2>
  <ul id="GPsm">
    <li id="eunD"><strong>Масштабируемость:</strong> <br />Позволяет &quot;приближать&quot; или &quot;отдалять&quot; детали, показывая систему с разной степенью детализации.</li>
    <li id="FWfv"><strong>Понятность:</strong> <br />Простота нотации делает диаграммы понятными для разных специалистов, от бизнес-аналитиков до разработчиков.</li>
    <li id="sSmr"><strong>Иерархичность:</strong> <br />Чёткое разделение на уровни помогает постепенно раскрывать сложность системы, не перегружая диаграммы лишней информацией.</li>
    <li id="hGDK"><strong>Гибкость:</strong> <br />Модель не навязывает строгие формальные нотации и может использовать различные инструменты для создания диаграмм, включая UML и Miro.</li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@sys-analyst/job-description</guid><link>https://teletype.in/@sys-analyst/job-description?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst</link><comments>https://teletype.in/@sys-analyst/job-description?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst#comments</comments><dc:creator>sys-analyst</dc:creator><title>&quot;Прожарка&quot; описания вакансий</title><pubDate>Sun, 22 Dec 2024 12:17:54 GMT</pubDate><description><![CDATA[Написано коммуникабельным, легкообучаемым и стрессоустойчивым пользователем ПК.]]></description><content:encoded><![CDATA[
  <p id="l7bD"><em>Написано коммуникабельным, легкообучаемым и стрессоустойчивым пользователем ПК.</em></p>
  <p id="h9LP">Вот заметил, что в HR-среде появился новый формат -  &quot;Прожарка резюме&quot;. Это очень правильно. Ибо много раз замечал, что прекрасные высококвалифицированные работники просто не понимают, как себя сначала эффектно <em><strong>подать</strong></em>, а потом по дороже <em><strong>продать</strong></em>.</p>
  <p id="b5O1">Но порой очень интересно читать не только чужие резюме, но и описание вакансий. Поскольку мой синдром самозванца привёл к тому, что последнее время числюсь в &quot;системных аналитиках&quot;, давайте рассмотрим типичную вакансию на такую должность с высшей степени средней заработной платой по рынку.</p>
  <p id="WNvf">Итак вот небольшая цитата требований к соискателю:</p>
  <ul id="ng0Q">
    <li id="xE74"><strong>Опыт работы в роли системного аналитика от 3 лет;</strong></li>
    <li id="RWTu">Опыт работы с web-сервисами. Знаешь варианты интеграций между системами <strong>(JSON, XML, REST, SOAP, Kafka, MQ);</strong></li>
    <li id="0sEG">Опыт описания бизнес процессов(UML, BPMN)</li>
    <li id="Jpzm">Опыт написания функциональных требований/бизнес-требований/технических спецификаций на разработку;</li>
    <li id="1iSS">Опыт с микросервисной архитектурой или был опыт переноса с монолита на микросервисы.</li>
    <li id="c5Pq">Опыт работы с БД на уровне построения<strong> сложных запросов </strong>и готов это продемонстрировать на собеседовании.</li>
  </ul>
  <p id="j5CG">Давайте пройдёмся по пунктам.</p>
  <p id="xZRC">1. &quot;<strong>Опыт работы в роли системного аналитика от 3 лет</strong>&quot;.</p>
  <p id="ojGc">Тут вопросов нет, тут всё понятно. Но только меня бесит слово &quot;роль&quot; в этом предложении? Вот к этому слову множество вопросов. Неужели нельзя просто написать: &quot;Опыт работы системным аналитиком от 3 лет&quot; ? Или это - слишком просто для такой сложной вакансии? Или хотят отсечь тех, кто уже в IT, но роль системного аналитика пока не выбрал или выбрал достаточно поздно?</p>
  <p id="MW9n">2. &quot;Опыт работы с web-сервисами&quot;</p>
  <p id="remv">Вы меня извините, а что это такое? Вот у меня формулировки не было, полез искать. Вот что нашёл в wiki: &quot;идентифицируемая уникальным  веб-адресом (URL-адресом) программная система со стандартизированными интерфейсами&quot;. Стало понятнее? Вот и мне - тоже. Но звучит очень круто. Неопытного соискателя должно отпугнуть (может быть, на это и расчёт?).</p>
  <p id="81jf">Но вот особенно радует следующее предложение.</p>
  <p id="LINK">3. &quot;Знаешь варианты интеграций между системами <strong>(JSON, XML, REST, SOAP, Kafka, MQ)</strong>&quot;.</p>
  <p id="E6LF">Как там было у Алёны Апиной: &quot;<em>Я тебя слепила из того, что было</em>&quot;.</p>
  <p id="kCBn">Давайте разбираться.</p>
  <ul id="LmmX">
    <li id="bKyM">JSON и XML - стандарты передачи данных. </li>
    <li id="6FS7">SOAP - протокол передачи данных.</li>
    <li id="eaal">REST - &quot;<em>архитектурный стиль</em>&quot;.</li>
    <li id="6L3W">Kafka - брокер сообщений.</li>
    <li id="3T9G">MQ... Тут, как мне кажется, имелся ввиду &quot;IBM WebSphere MQ&quot; - семейство сетевого ПО. Ну или &quot;Rabbit MQ&quot; - брокер сообщений. </li>
  </ul>
  <p id="hjKJ">Тут почему-то внезапно к соискателю перешли на &quot;ты&quot;. Типа знаешь вот это вот всё? Применял на практике? От аббревиатуры MQ не падаешь в обморок? Можешь объяснить разницу между <s>ежом и ужом</s> SOAP и REST?</p>
  <p id="Q0hG">NB. Уже давно не удивляет, как в IT-среде любят мешать всё в кучу, не разбираясь, что есть что. Но первые 10-15 лет очень бесило, например, как стандарт &quot;ISO 8583&quot; называли &quot;<em>протоколом</em>&quot;. А типа аббревиатура <strong><em>ISO </em></strong>вам ничего не говорит?! </p>
  <p id="8Eoe">4. Опыт описания бизнес процессов(UML, BPMN)</p>
  <p id="1lz3">Для начала давайте переведу на русский.</p>
  <p id="ZB7N">UML - это <em>Unified Modeling Language</em> (унифицированный язык моделирования).</p>
  <p id="nvXo">BPMN - это <em>Business Process Model and Notation (</em>нотация и модель бизнес-процессов).</p>
  <p id="40N7">То есть, язык моделирования и нотация и модель бизнес-процессов. Умолчу о том, что UML позволяет строить 12 видов диаграмм. И далеко не все из них можно использовать для описания бизнес-процессов (например, все структурные диаграммы: классов, объектов и компонент).</p>
  <p id="API1">Но да, что-то про бизнес-процессы и их описание. </p>
  <p id="elDp">5. Опыт написания функциональных требований/бизнес-требований/технических спецификаций на разработку.</p>
  <p id="NnBg">Так и хочется спросить: &quot;А вам не надо будет описывать <strong><em>нефункциональные </em></strong>требования? Вы точно в это уверены?&quot;. Но к этой строчке претензий других нет, тут всё по делу.</p>
  <p id="RRig">6. Опыт с микросервисной архитектурой или был опыт переноса с монолита на микросервисы.</p>
  <p id="RTKj">Только мне странно, что вместо пафосного определения &quot;<em>миграция</em>&quot; было использовано простое русское слово &quot;<em>перенос</em>&quot;?</p>
  <p id="nKcU">Но меня больше задело само определение и союз &quot;или&quot; в нём. Типа был опыт переноса был, но при этом опыта с микросервисной архитектурой не было. А это, извините, как? Может быть лучше было написать так: &quot;Опыт работы с микросервисной архитектурой, опыт миграции из монолитного решения на микросервисы&quot;?</p>
  <p id="rwKF">7. Опыт работы с БД на уровне построения<strong> сложных запросов </strong>и готов это продемонстрировать на собеседовании.</p>
  <p id="viG9">Вот меня уже много лет удивляют требования к системным аналитикам про сложные SQL-запросы. Вас не удивляет? А зря! Да, какие-то элементарные знания SQL, конечно же, аналитику нужны, кто спорит! Например, чтобы найти что-то в базе данных, или посчитать число записей, или отсортировать что-то по каким-то условиям. Но вот &quot;<em>сложные запросы</em>&quot;... Вы точно системного аналитика ищите? Часто в своём опыте приходилось и приходится иметь дело с SQL. Но вот ни разу не страдал от того, что не могу мгновенно без шпаргалки сочинить сложный запрос. Да и нужны бывают такие запросы в работе раз в год по праздникам. Плюс теперь есть искусственный интеллект, который за 5 минут тебе почти любой запрос напишет (если умеешь им пользоваться, конечно).   </p>
  <p id="sFtq">P.S. Кстати, вы не знаете, почему очень часто в описании вакансии размер заработной платы указывают в самую последнюю очередь (если вообще указывается). Прямо как в роликах автоблогеров, которые так любят называть стоимость автомобиля в конце ролика.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@sys-analyst/tls</guid><link>https://teletype.in/@sys-analyst/tls?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst</link><comments>https://teletype.in/@sys-analyst/tls?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst#comments</comments><dc:creator>sys-analyst</dc:creator><title>Коротко про TLS</title><pubDate>Tue, 30 Jan 2024 11:24:23 GMT</pubDate><category>tls</category><description><![CDATA[HTTPS – это защищённая версия протокола HTTP, которая шифрует передаваемые данные между клиентом и сервером. HTTPS не является отдельным протоколом. Это обычный HTTP, который работает через шифрованный протокол TLS. В отличие от HTTP с TCP-портом 80, для HTTPS по умолчанию используется TCP-порт 443.]]></description><content:encoded><![CDATA[
  <p id="9pdC"><strong>HTTPS </strong>– это защищённая версия протокола HTTP, которая шифрует передаваемые данные между клиентом и сервером. HTTPS не является отдельным протоколом. Это обычный HTTP, который работает через шифрованный протокол TLS. В отличие от HTTP с TCP-портом 80, для HTTPS по умолчанию используется TCP-порт 443.</p>
  <p id="Cu4X">Протокол <strong>TLS </strong>(Transport Layer Security) — криптографический протокол, который обеспечивает защищённый обмен данными между сервером и клиентом. TLS расположен на уровень ниже протокола HTTP в модели OSI. Это означает, что в процессе выполнения запроса сперва происходят все “вещи”, связанные с TLS-соединением и уже потом, все что связано с HTTP-соединением. TLS пришёл на смену устаревшего протокола SSL.</p>
  <h2 id="1gVT">Зачем нужно шифрование</h2>
  <p id="yit3">В HTTP данные передаются в незашифрованном виде. Злоумышленник может просто перехватить пакет. HTTPS призван защитить соединение, чтобы данные никто не мог перехватить.</p>
  <h2 id="xP6F">Принцип работы TLS</h2>
  <p id="bUhe">Чтобы защитить данные, TLS создаёт во время передачи специальный канал, где их нельзя прочитать или изменить без секретного ключа. Ключ — это подсказка, как именно читать сообщение.</p>
  <p id="TPm8">В зависимости от количества ключей в TLS используется один из двух классов шифрования: симметричное и асимметричное.</p>
  <p id="0392"><strong>Симметричное </strong>шифрование — это когда используется один и тот же ключ для шифрования и дешифрования данных. Оно работает эффективно и быстро, но требует предварительного обмена ключом между клиентом и сервером, в ходе которого ключ могут перехватить.</p>
  <p id="D0a6"><strong>Асимметричное </strong>шифрование использует два ключа: публичный для шифрования и приватный для дешифровки. Публичный ключ можно свободно распространять, а приватный должен быть хорошо защищён. Асимметричное шифрование безопаснее, но требует больше вычислительных ресурсов и работает медленнее, чем симметричное.</p>
  <p id="uu3g">В протоколе TLS симметричное шифрование используют для шифрования непосредственно сообщений, а асимметричное шифрование — во время рукопожатия, то есть в начале сессии для обмена ключами и аутентификации.</p>
  <p id="Xtb2">А ещё в TLS используется <strong>хеширование</strong>. В отличие от шифрования, хеширование предполагает одностороннее кодирование: данные пропускаются через хеш-функцию и получается код. Сам код обратно раскодировать уже нельзя, но зато другой участник может легко убедиться в целостности данных, в том, что их никто не подменил. Для этого нужно снова вызвать хеш-функцию и сравнить значение полученного хеша с переданным.</p>
  <p id="JKGu">Таким образом, нужно использовать HTTPS, если нужно обеспечить <strong>безопасность данных</strong>, передаваемых между клиентом и сервером. Например, если вы обрабатываете личные данные, пароли, данные кредитных карт или другую чувствительную информацию.</p>
  <p id="ec7l">В противном случае, если нет требований по защите данных и проверки их целостности, то лучше использовать обычный HTTP, так как он работает проще и быстрые.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@sys-analyst/rest</guid><link>https://teletype.in/@sys-analyst/rest?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst</link><comments>https://teletype.in/@sys-analyst/rest?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst#comments</comments><dc:creator>sys-analyst</dc:creator><title>Как понять, что нужно использовать REST? </title><pubDate>Thu, 18 Jan 2024 08:26:34 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/44/f7/44f750cd-0c5b-48f4-b553-33d7b74f4a94.png"></media:content><category>API</category><description><![CDATA[<img src="https://img2.teletype.in/files/11/65/11656cfd-f8b9-406a-af51-6a63ef9a401a.png"></img>REST - самый популярный способ разработки веб-сервисов. По итогам опросов, проводимых Postman, использование немного снизилось за последние два года — с 92% до 86%. Но простота, масштабируемость и легкость в интеграциях с веб-сервисами закрепляют позицию REST на первом месте.]]></description><content:encoded><![CDATA[
  <figure id="l12x" class="m_column">
    <img src="https://img2.teletype.in/files/11/65/11656cfd-f8b9-406a-af51-6a63ef9a401a.png" width="1017" />
  </figure>
  <p id="G5Dd">REST - самый популярный способ разработки веб-сервисов. По итогам опросов, проводимых Postman, использование немного снизилось за последние два года — с 92% до 86%. Но простота, масштабируемость и легкость в интеграциях с веб-сервисами закрепляют позицию REST на первом месте.</p>
  <p id="Mt0l">Как любой инструмент или подход, REST не всегда лучший выбор для всех сценариев.</p>
  <p id="xl81">REST точно не нужен в следующих случаях:</p>
  <p id="yuoG">➖Онлайн взаимодействие: для приложений, требующих постоянного соединения для быстрого обмена данными в онлайн режиме (онлайн-игры, чаты). WebSocket или другие протоколы реального времени подойдут лучше.</p>
  <p id="icMJ">➖Различные наборы данных под каждого клиента: если клиенты (например, мобильное приложение и веб-сайт) требуют разных наборов данных, GraphQL может предоставить больше гибкости, позволяя клиентам запрашивать только те данные, которые им нужны.</p>
  <p id="sXVR">➖Бинарный Протокол: если требуется эффективность и минимальные затраты на передачу данных, то протоколы, такие как gRPC, использующие бинарные форматы передачи данных, могут быть более эффективными.</p>
  <p id="JcxQ">➖Служебная Информация: если ваш API должен передавать много служебной информации вместе с данными (например, метаданными или инструкциями обработки), SOAP может быть более подходящим, так как он предоставляет стандартизированный способ включения такой информации в сообщения.</p>
  <p id="kZfT">➖Обратная Совместимость: если ваша система уже имеет существующие интеграции на основе другого протокола (например, SOAP), и переход на REST может вызвать сбои или требует значительной переработки, может быть рационально продолжить использовать текущий протокол.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@sys-analyst/uml-3</guid><link>https://teletype.in/@sys-analyst/uml-3?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst</link><comments>https://teletype.in/@sys-analyst/uml-3?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst#comments</comments><dc:creator>sys-analyst</dc:creator><title>Виды UML-диаграмм</title><pubDate>Thu, 31 Aug 2023 08:57:05 GMT</pubDate><category>UML</category><description><![CDATA[В UML используются следующие виды диаграмм:]]></description><content:encoded><![CDATA[
  <p id="DoIG">В UML используются следующие виды диаграмм:</p>
  <p id="OaQ6"><strong>Structure Diagrams (Структурные диаграммы):</strong></p>
  <ul id="hxQg">
    <li id="ycnk">Class diagram (Диаграмма классов)</li>
    <li id="l7zX">Component diagram (Диаграмма компонентов)</li>
    <li id="7U0E">Composite structure diagram (Диаграмма композитной/составной структуры)</li>
    <ul id="L1y0">
      <li id="RZaS">Collaboration (UML2.0, Диаграмма кооперации)</li>
    </ul>
    <li id="54r1">Deployment diagram (Диаграмма развёртывания)</li>
    <li id="mBYw">Object diagram (Диаграмма объектов)</li>
    <li id="kLYI">Package diagram (Диаграмма пакетов) </li>
    <li id="pJKn">Profile diagram (UML2.2, Диаграмма профилей)</li>
  </ul>
  <p id="Lyeb"><strong>Behavior Diagrams (Диаграммы поведения):</strong></p>
  <ul id="2orc">
    <li id="ag48">Activity diagram (Диаграмма деятельности)</li>
    <li id="IGlm">State Machine diagram (Диаграмма состояний)</li>
    <li id="o8JX">Use case diagram (Диаграмма прецедентов или диаграмма вариантов использования)</li>
    <li id="lVAq"><strong>Interaction Diagrams (Диаграммы взаимодействия):</strong></li>
    <ul id="AdH9">
      <li id="gRKH">Communication diagram (UML2.0) / Collaboration (UML1.x) (Диаграмма коммуникации / Диаграмма кооперации)</li>
      <li id="ZpB8">Interaction overview diagram (UML2.0) (Диаграмма обзора взаимодействия)</li>
      <li id="Xl7p">Sequence diagram (Диаграмма последовательности)</li>
      <li id="HRRZ">Timing diagram (UML2.0) (Диаграмма синхронизации)</li>
    </ul>
  </ul>
  <p id="zfyY">Ниже дано краткое описание диаграммы каждого вида.</p>
  <h2 id="jvi3">1. Диаграмма классов</h2>
  <p id="sNvX"><em>Диаграмма классов</em> (Class diagram) — статическая структурная диаграмма, описывающая структуру системы, демонстрирующая классы системы, их атрибуты, методы и зависимости между классами.</p>
  <p id="DPTL">Существуют разные точки зрения на построение диаграмм классов в зависимости от целей их применения:</p>
  <ul id="ROwi">
    <li id="E3bK">концептуальная точка зрения — диаграмма классов описывает модель предметной области, в ней присутствуют только классы прикладных объектов;</li>
    <li id="g2EL">точка зрения спецификации — диаграмма классов применяется при проектировании информационных систем;</li>
    <li id="86oA">точка зрения реализации — диаграмма классов содержит классы, используемые непосредственно в программном коде (при использовании объектно-ориентированных языков программирования).</li>
  </ul>
  <h2 id="4cxk">2. Диаграмма компонентов</h2>
  <p id="vTlZ"><em>Диаграмма компонентов</em> (Component diagram) — статическая структурная диаграмма, показывает разбиение программной системы на структурные компоненты и связи (зависимости) между компонентами. В качестве физических компонентов могут выступать файлы, библиотеки, модули, исполняемые файлы, пакеты и т. п.</p>
  <h2 id="Vi0j">3. Диаграмма композитной/составной структуры</h2>
  <p id="SW1O"><em>Диаграмма композитной/составной структуры</em> (Composite structure diagram) — статическая структурная диаграмма, демонстрирует внутреннюю структуру классов и, по возможности, взаимодействие элементов (частей) внутренней структуры класса.</p>
  <p id="7Mry">Подвидом диаграмм композитной структуры являются <em>диаграммы кооперации</em> (Collaboration diagram, введены в UML 2.0), которые показывают роли и взаимодействие классов в рамках кооперации. Кооперации удобны при моделировании шаблонов проектирования.</p>
  <p id="iX0V">Диаграммы композитной структуры могут использоваться совместно с диаграммами классов.</p>
  <h2 id="ZCph">4. Диаграмма развёртывания</h2>
  <p id="4Hg3"><em>Диаграмма развёртывания</em> (Deployment diagram, диаграмма размещения) — служит для моделирования работающих узлов (аппаратных средств, <em>node</em>) и артефактов, развёрнутых на них. В UML 2 на узлах разворачиваются артефакты (<em>artifact</em>), в то время как в UML 1 на узлах разворачивались компоненты. Между артефактом и логическим элементом (компонентом), который он реализует, устанавливается зависимость манифестации.</p>
  <h2 id="R4ZX">5. Диаграмма объектов</h2>
  <p id="u6vF"><em>Диаграмма объектов</em> (Object diagram) — демонстрирует полный или частичный снимок моделируемой системы в заданный момент времени. На диаграмме объектов отображаются экземпляры классов (объекты) системы с указанием текущих значений их атрибутов и связей между объектами.</p>
  <h2 id="u0cA">6. Диаграмма пакетов</h2>
  <p id="wAGC"><em>Диаграмма пакетов</em> (Package diagram) — структурная диаграмма, основным содержанием которой являются пакеты и отношения между ними. Жёсткого разделения между разными структурными диаграммами не проводится, поэтому данное название предлагается исключительно для удобства и не имеет семантического значения (пакеты и диаграммы пакетов могут присутствовать на других структурных диаграммах). Диаграммы пакетов служат, в первую очередь, для организации элементов в группы по какому-либо признаку с целью упрощения структуры и организации работы с моделью системы.</p>
  <h2 id="XwYI">7. Диаграмма деятельности</h2>
  <p id="VzZP"><em>Диаграмма деятельности</em> (Activity diagram) — диаграмма, на которой показано разложение некоторой деятельности на её составные части. Под деятельностью (<em>activity</em>) понимается спецификация исполняемого поведения в виде координированного последовательного и параллельного выполнения подчинённых элементов — вложенных видов деятельности и отдельных действий (<em>action</em>), соединённых между собой потоками, которые идут от выходов одного узла к входам другого.</p>
  <p id="6v4K">Диаграммы деятельности используются при моделировании бизнес-процессов, технологических процессов, последовательных и параллельных вычислений.</p>
  <h2 id="CBT3">8. Диаграмма автомата</h2>
  <p id="xT3c"><em>Диаграмма автомата</em> (State Machine diagram, диаграмма конечного автомата, диаграмма состояний) — диаграмма, на которой представлен конечный автомат с простыми состояниями, переходами и композитными состояниями.</p>
  <p id="BBMa"><em>Конечный автомат</em> (State machine) — спецификация последовательности состояний, через которые проходит объект или взаимодействие в ответ на события своей жизни, а также ответные действия объекта на эти события. Конечный автомат прикреплён к исходному элементу (классу, кооперации или методу) и служит для определения поведения его экземпляров.</p>
  <h2 id="LpJs">9. Диаграмма прецедентов (Диаграмма вариантов использования)</h2>
  <p id="dPg6"><em>Диаграмма прецедентов</em> или <em>диаграмма вариантов использования</em> (Use case diagram) — диаграмма, на которой отражены отношения, существующие между акторами и вариантами использования.</p>
  <p id="Bw5C">Основная задача — представлять собой единое средство, дающее возможность заказчику, конечному пользователю и разработчику совместно обсуждать функциональность и поведение системы.</p>
  <h2 id="v2zc">10. Диаграммы коммуникации и последовательности</h2>
  <p id="7O3F"><em>Диаграммы коммуникации и последовательности</em> транзитивны, выражают взаимодействие, но показывают его различными способами и с достаточной степенью точности могут быть преобразованы одна в другую.</p>
  <p id="kmaZ"><em>Диаграмма коммуникации</em> (Communication diagram, в UML 1.x — диаграмма кооперации, collaboration diagram) — диаграмма, на которой изображаются взаимодействия между частями композитной структуры или ролями кооперации. В отличие от диаграммы последовательности, на диаграмме коммуникации явно указываются отношения между элементами (объектами), а время как отдельное измерение не используется (применяются порядковые номера вызовов).</p>
  <p id="JQN7"><em>Диаграмма последовательности</em> (Sequence diagram) — диаграмма, на которой показаны взаимодействия объектов, упорядоченные по времени их проявления. В частности, на ней изображаются участвующие во взаимодействии объекты и последовательность сообщений, которыми они обмениваются.</p>
  <p id="AIPh"><em>Диаграмма сотрудничества</em> — этот тип диаграмм позволяет описать взаимодействия объектов, абстрагируясь от последовательности передачи сообщений. На этом типе диаграмм в компактном виде отражаются все принимаемые и передаваемые сообщения конкретного объекта и типы этих сообщений.</p>
  <p id="il1q">По причине того, что диаграммы Sequence и Collaboration являются разными взглядами на одни и те же процессы, Rational Rose позволяет создавать из Sequence диаграммы диаграмму Collaboration и наоборот, а также производит автоматическую синхронизацию этих диаграмм.</p>
  <h2 id="UD1x">11. Диаграмма обзора взаимодействия</h2>
  <p id="y92U"><em>Диаграмма обзора взаимодействия</em> — разновидность диаграммы деятельности, включающая фрагменты диаграммы последовательности и конструкции потока управления.</p>
  <p id="FIoV">Этот тип диаграмм включает в себя диаграммы Sequence diagram (диаграммы последовательностей действий) и Collaboration diagram (диаграммы сотрудничества). Эти диаграммы позволяют с разных точек зрения рассмотреть взаимодействие объектов в создаваемой системе.</p>
  <h2 id="8htl">12. Диаграмма синхронизации</h2>
  <p id="vZbz"><em>Диаграмма синхронизации</em> (Timing diagram) — альтернативное представление диаграммы последовательности, явным образом показывающее изменения состояния на линии жизни с заданной шкалой времени. Может быть полезна в приложениях реального времени.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@sys-analyst/sql-2</guid><link>https://teletype.in/@sys-analyst/sql-2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst</link><comments>https://teletype.in/@sys-analyst/sql-2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst#comments</comments><dc:creator>sys-analyst</dc:creator><title>SQL. Часть 2. Выводим не всё и по порядку</title><pubDate>Wed, 30 Aug 2023 09:17:38 GMT</pubDate><category>sql</category><description><![CDATA[Порой выводить результаты запроса надо в каком-то порядке или не все, а какую-то часть. Для это можно использовать следующее.]]></description><content:encoded><![CDATA[
  <p id="C3lP"><em>Порой выводить результаты запроса надо в каком-то порядке или не все, а какую-то часть. Для это можно использовать следующее.</em></p>
  <h2 id="pHFV">Ключевое слово ORDER BY</h2>
  <p id="dCQQ">Ключевое слово ORDER BY используется для сортировки результирующего набора в порядке возрастания или убывания. По умолчанию упорядочение по ключевым словам сортирует записи в порядке возрастания. Для сортировки записей в порядке убывания используйте ключевое слово «описание».</p>
  <p id="3Z27"><u>Примеры</u>:</p>
  <blockquote id="QSR9">SELECT * FROM Customers ORDER BY Country</blockquote>
  <p id="kBXu">Эта инструкция выбирает всех записи из таблицы «Customers», отсортированной по столбцу «Country» (по алфавиту). Если надо вывести те же данные, но в порядке, обратном алфавитному, надо использовать описание &quot;DESC&quot; (сортировка по убыванию). </p>
  <blockquote id="Gsek">SELECT * FROM Customers ORDER BY Country DESC</blockquote>
  <p id="BKPx">Для сортировки по возрастанию можно использовать описание &quot;ASC&quot; (используется по умолчанию).</p>
  <p id="0rt6">Заметим, что можно соритровать информацию по нескольким столбцам:</p>
  <blockquote id="ADXE">SELECT * FROM Customers ORDER BY Country ASC, CustomerName DESC</blockquote>
  <p id="Vb4g">Эта инструкция выбирает все записи из таблицы «Customers», отсортированных по алфавиту значения поля в столбце «Country» и в обратном алфавитном порядке по значению поля в столбце  «CustomerName».</p>
  <h2 id="GY72">Предложение SELECT Top/Limit</h2>
  <p id="iAv1">Предложение SELECT Top/Limit используется для указания количества возвращаемых записей. Предложение SELECT Top/Limit полезно для больших таблиц с тысячами записей. Возврат большого количества записей может повлиять на производительность. Кроме того, такие данные просто тяжело читать.</p>
  <blockquote id="utTb">Почему Top/Limit? Некоторые версии SQL (например, MySQL) не поддерживает предложение &quot;Top&quot;, но поддерживают предложение &quot;Limit&quot; (и наоборот).</blockquote>
  <p id="HIT8"><u>Примеры</u>:</p>
  <p id="zALA">1. SELECT * FROM Customers LIMIT 100</p>
  <p id="dCtI">2. SELECT TOP 100 * FROM Customers </p>
  <p id="KazZ">Выводятся первые 100 записей из таблицы «Customers» отсортированные по умолчанию.</p>
  <p id="hDkl"></p>
  <p id="5CFF">Теперь соединим оба описываемых параметра в одном примере:<br /> SELECT TOP 10 * FROM Customers  ORDER BY Country </p>
  <p id="Yh3u">По данному запросу выводятся 100 первых записей из таблицы «Customers» отсортированные по алфавиту названия страны.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@sys-analyst/sql-1</guid><link>https://teletype.in/@sys-analyst/sql-1?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst</link><comments>https://teletype.in/@sys-analyst/sql-1?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=sys-analyst#comments</comments><dc:creator>sys-analyst</dc:creator><title>SQL. Основные команды и операторы. Часть 1</title><pubDate>Tue, 29 Aug 2023 11:05:09 GMT</pubDate><category>sql</category><description><![CDATA[SQL является стандартным языком для хранения, редактирования, удаления и извлечения данных в базах данных.]]></description><content:encoded><![CDATA[
  <p id="Lfp7">SQL является стандартным языком для хранения, редактирования, удаления и извлечения данных в базах данных.</p>
  <p id="zyLm">SQL расшифровывается как &quot;структурированный язык запросов&quot;. SQL позволяет обращаться к базам данных и управлять ими. SQL стал стандартом американского Национального института стандартов (ANSI) в 1986, и международной организации по стандартизации (ISO) в 1987.</p>
  <h2 id="N8ya">Самые используемые команды SQL</h2>
  <h3 id="ekKu">DML — язык изменения данных (Data Manipulation Language)</h3>
  <ul id="i7A4">
    <li id="QHB5"><strong>SELECT</strong> - Извлекает данные из базы данных;</li>
    <li id="xqFA"><strong>UPDATE</strong> - обновляет данные в базе данных;</li>
    <li id="FWn7"><strong>DELETE</strong> - Удаление данных из базы данных;</li>
    <li id="K7tg"><strong>INSERT INTO</strong> - Вставка новых данных в базу данных;</li>
  </ul>
  <p id="X8gv"></p>
  <h3 id="Ij4s">DDL — язык определения данных (Data Definition Language)</h3>
  <ul id="yRZG">
    <li id="myEQ"><strong>CREATE DATABASE</strong> - создает новую базу данных;</li>
    <li id="RCNh"><strong>ALTER DATABASE</strong> - изменяет базу данных;</li>
  </ul>
  <p id="sdUV"></p>
  <ul id="izMN">
    <li id="kacs"><strong>CREATE TABLE</strong> - Создание новой таблицы;</li>
    <li id="JgBD"><strong>ALTER TABLE</strong> - изменяет таблицу;</li>
    <li id="RsqF"><strong>DROP TABLE</strong> - Удаление таблицы;</li>
  </ul>
  <p id="GddJ"></p>
  <ul id="Dw9O">
    <li id="9sEc"><strong>CREATE INDEX</strong> - создает индекс (ключ поиска);</li>
    <li id="fx5O"><strong>DROP INDEX</strong> - Удаляет индекс.</li>
  </ul>
  <p id="49ue"></p>
  <h3 id="eseK">DCL — язык управления данными (Data Control Language)</h3>
  <ul id="6SZI">
    <li id="BoYz">GRANT - Наделяет пользователя правами;</li>
    <li id="b7IR">REVOKE - Отменяет права пользователя.</li>
  </ul>
  <h2 id="2fsi">Ограничения (constraints)</h2>
  <p id="ntQ3">Ограничения могут устанавливаться как на уровне колонки, так и на уровне таблицы.</p>
  <p id="HJBa">Среди наиболее распространенных ограничений можно назвать следующие:</p>
  <ul id="oIH6">
    <li id="nal9"><code>NOT NULL</code> — колонка не может иметь нулевое значение;</li>
    <li id="rQnG"><code>DEFAULT</code> — значение колонки по умолчанию;</li>
    <li id="JPwG"><code>UNIQUE</code> — все значения колонки должны быть уникальными;</li>
    <li id="CVx7"><code>PRIMARY KEY</code> — первичный или основной ключ, уникальный идентификатор записи в текущей таблице;</li>
    <li id="8nnk"><code>FOREIGN KEY</code> — внешний ключ, уникальный идентификатор записи в другой таблице (таблице, связанной с текущей);</li>
    <li id="L0CB"><code>CHECK</code> — все значения в колонке должны удовлетворять определенному условию;</li>
    <li id="GC35"><code>INDEX</code> — быстрая запись и извлечение данных.</li>
  </ul>
  <p id="94P8">Любое ограничение может быть удалено с помощью команды <code>ALTER TABLE</code> и <code>DROP CONSTRAINT</code> + название ограничения. Некоторые реализации предоставляют сокращения для удаления ограничений и возможность отключать ограничения вместо их удаления.</p>
  <h2 id="ltCK">Целостность данных</h2>
  <p id="lmYG">В каждой СУБД существуют следующие категории целостности данных:</p>
  <ul id="odO6">
    <li id="oTZD">целостность объекта (Entity Integrity) — в таблице не должно быть дубликатов (двух и более строк с одинаковыми значениями);</li>
    <li id="apdz">целостность домена (Domain Integrity) — фильтрация значений по типу, формату или диапазону;</li>
    <li id="x5kE">целостность ссылок (Referential integrity) — строки, используемые другими записями (строки, на которые в других записях имеются ссылки), не могут быть удалены;</li>
    <li id="06Da">целостность, определенная пользователем (User-Defined Integrity) — дополнительные правила.</li>
  </ul>
  <h2 id="osRr">Нормализация БД</h2>
  <p id="SZHV">Нормализация — это <strong>процесс эффективной организации данных</strong> в БД. Существует две главных причины, обуславливающих необходимость нормализации:</p>
  <ul id="xn83">
    <li id="D38u">предотвращение записи в БД лишних данных, например, хранения одинаковых данных в разных таблицах;</li>
    <li id="JLos">обеспечение &quot;оправданной&quot; связи между данными.</li>
  </ul>
  <p id="BJuA">Нормализация предполагает соблюдение нескольких форм. Форма — это формат структурирования БД. Существует три главных формы: первая, вторая и, соответственно, третья. Я не буду вдаваться в подробности об этих формах, при желании, вы без труда найдете необходимую информацию.</p>
  <h2 id="SsKb">Типы данных</h2>
  <p id="RW37">Каждая колонка, переменная и выражение в <code>SQL</code> имеют определенный тип данных (data type). Основные категории типов данных:</p>
  <h3 id="vrTf">Точные числовые</h3>
  <figure id="Eqo4" class="m_column">
    <img src="https://img3.teletype.in/files/e7/47/e7477877-693e-416c-911c-92982bb1bace.png" width="925" />
  </figure>
  <h3 id="o9cI">Приблизительные числовые</h3>
  <figure id="iwGq" class="m_column">
    <img src="https://img2.teletype.in/files/d7/dc/d7dc764e-697c-4ace-a909-b6a66c3ba241.png" width="925" />
  </figure>
  <h3 id="7Lx1">Дата и время</h3>
  <figure id="39VA" class="m_column">
    <img src="https://img1.teletype.in/files/8d/a6/8da6c20d-2795-4fdc-9db4-6fc71c7b8d02.png" width="925" />
  </figure>
  <h3 id="LRP8">Строковые символьные</h3>
  <figure id="W24Z" class="m_column">
    <img src="https://img3.teletype.in/files/62/08/6208738b-10a6-40e5-ae98-8b068658efd1.png" width="925" />
  </figure>
  <h3 id="244r">Строковые символьные (юникод)</h3>
  <figure id="FMR7" class="m_column">
    <img src="https://img1.teletype.in/files/c5/be/c5becd4d-8815-45c4-bfe6-9cf105864648.png" width="925" />
  </figure>
  <h3 id="llsw">Бинарные</h3>
  <figure id="g0Zy" class="m_column">
    <img src="https://img2.teletype.in/files/dd/a1/dda1ed3a-2f9f-498c-8183-7d4ad2bfc2a7.png" width="925" />
  </figure>
  <h3 id="n1g6">Смешанные</h3>
  <figure id="a3EL" class="m_column">
    <img src="https://img4.teletype.in/files/37/4d/374d8e02-c5d1-4ac7-b7c9-474796390b58.png" width="925" />
  </figure>
  <h2 id="Dqnv">Синтаксис SQL</h2>
  <h3 id="CCw3">Логические операторы</h3>
  <figure id="KmfO" class="m_column">
    <img src="https://img2.teletype.in/files/dd/3b/dd3bb0e0-4dfb-45a4-834c-76774e0b6031.png" width="925" />
  </figure>
  <h3 id="Yb7X">Встроенных функций для чисел</h3>
  <ul id="Gi9k">
    <li id="7KWo"><code>AVG</code> — вычисляет среднее значение;</li>
    <li id="Jt76"><code>SUM</code> — вычисляет сумму значений;</li>
    <li id="a22e"><code>MIN</code> — вычисляет наименьшее значение;</li>
    <li id="wJyM"><code>MAX</code> — вычисляет наибольшее значение;</li>
    <li id="4sPd"><code>COUNT</code> — вычисляет количество записей в таблице.</li>
    <li id="XmHZ"><code>ROUND</code> — округляет число;</li>
    <li id="aF39"><code>TRUNCATE</code> — обрезает дробное число до указанного количества знаков после запятой;</li>
    <li id="E3lP"><code>CEILING</code> — возвращает наименьшее целое число, которое больше или равно текущему значению;</li>
    <li id="o1Za"><code>FLOOR</code> — возвращает наибольшее целое число, которое меньше или равно текущему значению;</li>
    <li id="fHdL"><code>POWER</code> — возводит число в указанную степень;</li>
    <li id="M16E"><code>SQRT</code> — возвращает квадратный корень числа;</li>
    <li id="1jZP"><code>RAND</code> — генерирует случайное число с плавающей точкой в диапазоне от 0 до 1.</li>
  </ul>
  <h3 id="yleS">Встроенных функций для строк</h3>
  <ul id="kJEm">
    <li id="7vDn"><code>CONCAT</code> — объединение строк;</li>
    <li id="DMXJ"><code>LENGTH</code> — возвращает количество символов в строке;</li>
    <li id="aZDs"><code>TRIM</code> — удаляет пробелы в начале и конце строки;</li>
    <li id="xq9s"><code>SUBSTRING</code> — извлекает подстроку из строки;</li>
    <li id="SNTG"><code>REPLACE</code> — заменяет подстроку в строке;</li>
    <li id="S82L"><code>LOWER</code> — переводит символы строки в нижний регистр;</li>
    <li id="XV9e"><code>UPPER</code> — переводит символы строки в верхний регистр и т.д.</li>
  </ul>
  <h3 id="CDmM">Встроенные инструменты для работы с временем и датой</h3>
  <p id="I0Ym">Возвращает текущую время и дату: </p>
  <pre id="92Ts">SELECT CURRENT_TIMESTAMP;</pre>
  <p id="LX0T"><code>CURRENT_TIMESTAMP</code> — это и выражение, и функция (<code>CURRENT_TIMESTAMP()</code>). Другая функция для получения текущей даты и времени — <code>NOW()</code>.</p>
  <p id="ErHq"><strong>Функции для разбора даты и времени:</strong></p>
  <ul id="NtVY">
    <li id="bjdb"><code>DAYOFMONTH(date)</code> — возвращает день месяца в виде числа</li>
    <li id="7Ptr"><code>DAYOFWEEK(date)</code> — возвращает день недели в виде числа</li>
    <li id="AHtX"><code>DAYOFYEAR(date)</code> — возвращает номер дня в году</li>
    <li id="9RRu"><code>MONTH(date)</code> — возвращает месяц</li>
    <li id="emAq"><code>YEAR(date)</code> — возвращает год</li>
    <li id="KO2R"><code>LAST_DAY(date)</code> — возвращает последний день месяца в виде даты</li>
    <li id="d7Ou"><code>HOUR(time)</code> — возвращает час</li>
    <li id="vHVf"><code>MINUTE(time)</code> — возвращает минуты</li>
    <li id="prtN"><code>SECOND(time)</code> — возвращает секунды и др.</li>
  </ul>
  <p id="fmwe"><strong>Функции для манипулирования датами:</strong></p>
  <ul id="Blmq">
    <li id="8QY6"><code>DATE_ADD(date, interval)</code> — выполняет сложение даты и определенного временного интервала</li>
    <li id="xhV1"><code>DATE_SUB(date, interval)</code> — выполняет вычитание из даты определенного временного интервала</li>
    <li id="uciv"><code>DATEDIFF(date1, date2)</code> — возвращает разницу в днях между двумя датами</li>
    <li id="xiq3"><code>TO_DAYS(date)</code> — возвращает количество дней с 0-го дня года</li>
    <li id="gi7Q"><code>TIME_TO_SEC(time)</code> — возвращает количество секунд с полуночи и др.</li>
  </ul>
  <p id="tKjl">Для форматирования даты и времени используются функции <code>DATE_FORMAT(date, format)</code> и <code>TIME_FORMAT(date, format)</code>, соответственно.</p>
  <h3 id="HioJ">Инструкция &quot;SELECT&quot;</h3>
  <p id="iLYP">Инструкция SELECT используется для выбора данных из базы данных.</p>
  <p id="v8GQ">Возвращаемые данные хранятся в результирующей таблице, называемой результирующим набором.</p>
  <p id="weFI">SELECT <em>column1</em>,<em> column2, ...</em><br />FROM <em>table_name</em></p>
  <p id="heS6">Где:</p>
  <ul id="KCWM">
    <li id="PIDO"><em>column1</em>,<em> column2 -</em>  имена столбцов;</li>
    <li id="n8S2"><em>table_name</em> -  имя таблицы.</li>
  </ul>
  <p id="CdVK">1. Можно использовать синтаксис SELECT * FROM <em>table_name.</em></p>
  <p id="WAis">По выполнению этого запроса выводится вся таблица полностью.</p>
  <p id="lsFi">2. Можно использовать некоторое условие (condition). Например, для запроса:</p>
  <blockquote id="Gc02">SELECT * FROM <em>table_name</em> WHERE <em>name </em>&lt;&gt; &#x27;example&#x27;</blockquote>
  <p id="NmHP">будут выводиться только те сроки таблицы <em>table_name, поле name у которых не равно значению &quot;example&quot;.</em></p>
  <h2 id="EGP8">Операторы в WHERE</h2>
  <ul id="bUu7">
    <li id="GKmr">&quot;=&quot;, равно - строгое равенство какому-то значению;</li>
    <li id="9qZU">&quot;&lt;&gt;&quot; -  не равно - строгое неравенство какому-то значению;</li>
    <li id="B82R">&quot;&gt;&quot;, больше - больше какого-то значения (корректно работает только для числовых значений или единичных символов);</li>
    <li id="9VeC">&quot;&lt;&quot;, меньше - меньше какого-то значения (корректно работает только для числовых значений или единичных символов);</li>
    <li id="ztJT">&quot;&gt;=&quot;, больше или равно - равно или больше какого-то значения (корректно работает только для числовых значений или единичных символов);</li>
    <li id="ZKpP">&quot;&lt;=&quot;, меньше или равно - равно или меньше какого-то значения (корректно работает только для числовых значений или единичных символов);</li>
    <li id="PuMk">&quot;BETWEEN&quot;, между - между каким-то инклюзивным диапазоном;</li>
    <li id="GOGY">&quot;LIKE&quot;, похоже - используется для поиска по какому-то шаблону;</li>
    <li id="GMIV">&quot;IN&quot;, в - используется для задания нескольких конечных значений;</li>
    <li id="TZ8o">&quot;IS NULL&quot; - используется для выбора данных, не имеющих значения (или имеющих значение &quot;NULL&quot;).</li>
  </ul>
  <blockquote id="Tw9b">NULL - это принятое в SQL обозначение пустого значения. Очевидно, что 0 не может быть пустым значением. Значение &quot;NULL&quot; означает, что значение пока не было задано или было удалено.</blockquote>
  <p id="49Mi">Кроме того, в операторе WHERE может находиться несколько условий поиска, между которыми могут операторы &quot;AND&quot;, &quot;OR&quot; или &quot;NOT&quot;.</p>
  <ul id="xbMT">
    <li id="yztV"><strong>AND</strong> - отображает те записи,  для которых все условия выполняются;</li>
    <li id="tcAQ"><strong>OR </strong>- отображает те записи,  для которых какое-либо из условий выполняется;</li>
    <li id="YcpR"><strong>NOT</strong> - отображает те записи, для которых условие не выполняется.</li>
  </ul>
  <h3 id="phyJ">Рассмотрим применение каждого оператора</h3>
  <ol id="blww">
    <li id="A4NY"><strong>Равно</strong><br />SELECT * FROM <em>table_name</em> WHERE <em>name = </em>&#x27;example&#x27;<br />Выводит из таблицы &quot;<em>table_name</em>&quot;, только те строки, в которых значение столбца &quot;<em>name</em>&quot; принимает значение &quot;example&quot;.</li>
    <li id="otMT"><strong>Не равно<br /></strong>SELECT * FROM <em>table_name</em> WHERE <em>name &lt;&gt; </em>&#x27;example&#x27;<br />Выводит из таблицы &quot;<em>table_name</em>&quot;, только те строки, в которых значение столбца &quot;<em>name</em>&quot; принимает значение не &quot;example&quot;.</li>
    <li id="Ezfd"><strong>Больше</strong><br />SELECT * FROM <em>table_name</em> WHERE <em>number &gt; </em>&#x27;1&#x27;<br />Выводит из таблицы &quot;<em>table_name</em>&quot;, только те строки, в которых значение столбца &quot;<em>number</em>&quot; больше 1.</li>
    <li id="W2hg"><strong>Меньше</strong><br />SELECT * FROM <em>table_name</em> WHERE <em>number &lt; </em>&#x27;1&#x27;<br />Выводит из таблицы &quot;<em>table_name</em>&quot;, только те строки, в которых значение столбца &quot;<em>number</em>&quot; меньше 1.</li>
    <li id="gdgH"><strong>Больше или равно<br /></strong>SELECT * FROM <em>table_name</em> WHERE <em>number &gt;= </em>&#x27;1&#x27;<br />Выводит из таблицы &quot;<em>table_name</em>&quot;, только те строки, в которых значение столбца &quot;<em>number</em>&quot; больше или равно 1.</li>
    <li id="jdKe"><strong>Меньше или равно<br /></strong>SELECT * FROM <em>table_name</em> WHERE <em>number &lt;= </em>&#x27;1&#x27;<br />Выводит из таблицы &quot;<em>table_name</em>&quot;, только те строки, в которых значение столбца &quot;<em>number</em>&quot; меньше или равно 1.</li>
    <li id="d7dN"><strong>BETWEEN<br /></strong>SELECT * FROM <em>table_name</em> WHERE <em>number </em>BETWEEN &#x27;1&#x27; AND &#x27;3&#x27;<br />Выводит из таблицы &quot;<em>table_name</em>&quot;, только те строки, в которых значение столбца &quot;<em>number</em>&quot; больше или равно 1 и меньше или равно 3.<br />Очевидно, что данный запрос можно заменить на запрос:<br />SELECT * FROM <em>table_name</em> WHERE <em>number </em>&gt;= &#x27;1&#x27; AND  <em>number &lt;</em>= &#x27;3&#x27;</li>
    <li id="98aU"><strong>LIKE</strong><br />SELECT * FROM <em>FamilyMembers </em>WHERE <em>status </em>LIKE &#x27;%ther%&#x27;<br />Выводит из таблицы &quot;<em>FamilyMembers </em>&quot;, только те строки, в которых значение столбца &quot;<em>status</em>&quot;  содержит &quot;ther&quot; (например, &quot;mother&quot; и &quot;father&quot;).</li>
    <li id="UEm4"><strong>IN<br /></strong>SELECT * FROM <em>table_name</em> WHERE <em>number </em>IN (&#x27;1&#x27;,&#x27;3&#x27;,&#x27;5&#x27;)<br />Выводит из таблицы &quot;<em>table_name</em>&quot;, только те строки, в которых значение столбца &quot;<em>number</em>&quot;  равно 1, 2 или 3.</li>
    <li id="6Hol"><strong>IS NULL</strong><br />SELECT * FROM <em>table_name</em> WHERE <em>number </em>IS NULL<br />Выводит из таблицы &quot;<em>table_name</em>&quot;, только те строки, в которых значение столбца &quot;<em>number</em>&quot;  не задано (или равно NULL). Очевидно, что можно заменить на<br />SELECT * FROM <em>table_name</em> WHERE <em>number = </em>NULL<br />Но использование IS NULL более наглядно.</li>
  </ol>

]]></content:encoded></item></channel></rss>