PHP | Вопросы собесов
2.3K subscribers
34 photos
1.54K links
Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @sendme_ads
Download Telegram
🤔 Для чего используется индексация и что это такое?

Индексация — это механизм в базах данных, который ускоряет поиск данных в таблицах. Индекс работает как оглавление книги: вместо того чтобы просматривать всю таблицу, база находит нужные данные по индексу.

🚩Зачем нужна индексация?

Ускоряет поиск (SELECT) – база данных быстрее находит нужные строки.
Ускоряет сортировку (ORDER BY) – индексы помогают быстрее упорядочивать данные.
Оптимизирует соединения таблиц (JOIN).

Замедляют операции INSERT, UPDATE, DELETE (так как индекс тоже нужно обновлять).
Индексы занимают дополнительное место в памяти.

🚩Пример индекса в SQL

1⃣Создание индекса
CREATE INDEX idx_users_name ON users(name);


Теперь поиск по name будет быстрее
SELECT * FROM users WHERE name = 'Alice';


🚩Типы индексов

🟠Обычный (B-Tree) индекс
Основной вид индекса, который ускоряет поиск по WHERE.
CREATE INDEX idx_name ON users(name);


🟠UNIQUE-индекс
Гарантирует, что значения в колонке не будут повторяться.
CREATE UNIQUE INDEX idx_email ON users(email);


🟠FULLTEXT-индекс
Используется для быстрого поиска по тексту.
CREATE FULLTEXT INDEX idx_text ON articles(content);


🟠Composite (Составной) индекс
Индекс сразу на несколько колонок (например, name + age).
CREATE INDEX idx_name_age ON users(name, age);


Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Зачем нужен шаблон Builder?

Шаблон Builder (Строитель) применяется для поэтапного создания сложных объектов. Он нужен, когда:
- Объект имеет много параметров, инициализация которых может быть сложной.
- Объект должен создаваться в разных конфигурациях, не загромождая конструктор.
- Код становится более читаемым, так как отделяется процесс создания от структуры объекта.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое полнотекстовый индекс?

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

🚩Зачем нужен полнотекстовый индекс?

Полнотекстовый индекс предназначен для поиска и обработки текстовой информации, особенно в больших текстовых данных. Это необходимо, когда требуется:
Искать слова или фразы внутри длинных текстовых полей.
Находить записи, которые соответствуют похожим по смыслу запросам, а не только точным совпадениям.
Обеспечивать более быстрый и релевантный поиск по сравнению с простым перебором данных.

🚩Как работает полнотекстовый индекс?

🟠Индексация
Когда создаётся полнотекстовый индекс, база данных анализирует текстовые данные, разбивает их на слова (токены) и сохраняет их в особой структуре индекса.
🟠Поиск
При выполнении запроса база данных ищет совпадения среди токенов в индексе, а не в самом тексте.
🟠Релевантность
Полнотекстовый индекс учитывает частоту появления слов и их позицию, чтобы выдавать результаты, наиболее соответствующие запросу.

🚩Использование полнотекстового индекса в MySQL

🟠Создание полнотекстового индекса
Полнотекстовый индекс можно создавать для столбцов типа CHAR, VARCHAR, или TEXT.
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
content TEXT,
FULLTEXT(title, content)
);


🟠Поиск с использованием полнотекстового индекса
Для выполнения полнотекстового поиска используется оператор MATCH ... AGAINST.
SELECT * 
FROM articles
WHERE MATCH(title, content) AGAINST('PHP tutorial');


🟠Модели поиска
Natural Language Mode: Поиск слов и фраз с учётом их важности.
Boolean Mode: Позволяет использовать логические операторы (например, + для обязательных слов, - для исключаемых).
Query Expansion: Автоматически расширяет запрос с помощью синонимов или связанных слов.
SELECT * 
FROM articles
WHERE MATCH(title, content) AGAINST('+PHP -Java' IN BOOLEAN MODE);


🚩Ограничения полнотекстового индекса

🟠Минимальная длина слова
По умолчанию слова короче 3 символов игнорируются (это настраивается).
🟠Стоп-слова
Некоторые часто встречающиеся слова (например, "and", "the") исключаются из индексации.
🟠Чувствительность к языку
Важно учитывать настройки языка для анализа текста.
🟠Поддержка типов данных
Полнотекстовые индексы доступны только для текстовых полей.

🚩Плюсы

➕Быстрый поиск по большим объемам текста.
➕Удобная работа с нерелевантными данными (например, похожими словами).
➕Возможность вычисления ранжирования (релевантности) результатов.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Что известно о MVC?

Это архитектурный шаблон, который разделяет приложение на три компонента:
1. Model: управляет данными и бизнес-логикой.
2. View: отвечает за отображение данных пользователю.
3. Controller: обрабатывает пользовательский ввод, связывает Model и View.
Это разделение упрощает разработку, тестирование и поддержку приложения.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Имеет ли значение регистр заголовка?

Значение регистра заголовков может варьироваться в зависимости от конкретного контекста или системы разметки, в которой используются заголовки. Рассмотрим несколько примеров, чтобы понять, как различные системы относятся к регистру заголовков.

🚩HTML

Регистр заголовков не имеет значения. Теги HTML не чувствительны к регистру, поэтому <H1>Заголовок</H1> и <h1>Заголовок</h1> будут интерпретироваться одинаково.
<h1>Заголовок</h1>
<H1>Заголовок</H1>


🚩Markdown

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


🚩LaTeX

Регистр заголовков тоже не имеет значения с точки зрения разметки, но стандартной практикой является использование заглавных букв в начале каждого важного слова для улучшения читаемости.
\section{Заголовок}
\section{заголовок}


🚩Wiki-разметка (например, MediaWiki)

Регистр заголовков не влияет на разметку, но для консистентности и лучшей читаемости заголовки часто оформляют с заглавными буквами
= Заголовок =
= заголовок =


🚩Языки программирования

Как таковые не используются, но комментарии-заголовки могут быть оформлены по-разному. Регистр здесь также не имеет значения для компилятора или интерпретатора, но для людей, читающих код, использование заглавных букв может сделать заголовки более заметными
# ЗАГОЛОВОК УРОВНЯ 1
# заголовок уровня 1


Оба варианта являются допустимыми комментариями
// ЗАГОЛОВОК УРОВНЯ 1
// заголовок уровня 1


Ставь 👍 и забирай 📚 Базу знаний
🤔1
🤔 Как устроен Git?

Это распределенная система контроля версий, работающая на основе графа коммитов и хранения изменений через хеши (SHA-1).
1. Объектная модель:
- Commit – снимок состояния проекта.
- Tree – каталог файлов в коммите.
- Blob – сами файлы (содержимое).
2. Система ссылок (HEAD, branches, tags).
3. Механизм staging (индексация изменений) перед коммитом.
4. Быстрая работа за счет хранения только изменений (deltas) и поддержки локального репозитория.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Расскажи про фабрики

Это шаблон проектирования, который относится к порождающим шаблонам и используется для создания объектов без необходимости указывать точный класс создаваемого объекта. Основная идея фабрики заключается в том, чтобы делегировать создание объектов специальному классу или методу, что упрощает управление кодом и позволяет добиться большей гибкости и расширяемости.

🚩Зачем нужны фабрики?

🟠Инкапсуляция процесса создания объектов
Если создание объекта требует сложной логики или конфигурации, фабрика позволяет скрыть эту сложность от остальной части кода.

🟠Снижение зависимости от конкретных классов
Вы используете интерфейсы или абстрактные классы вместо конкретных реализаций. Это упрощает замену одного типа объекта на другой.

🟠Гибкость и расширяемость
Фабрики позволяют добавлять новые классы без изменения существующего кода.

🚩Типы фабрик

🟠Простая фабрика (Simple Factory)
Это метод, который возвращает объект одного из нескольких возможных классов в зависимости от переданных параметров.

   class ShapeFactory {
public static function createShape(string $type) {
return match ($type) {
'circle' => new Circle(),
'square' => new Square(),
default => throw new Exception("Unknown shape type"),
};
}
}

$circle = ShapeFactory::createShape('circle'); // Возвращает объект Circle


🟠Фабричный метод (Factory Method)
В этом шаблоне создание объекта делегируется подклассам. Основной класс определяет интерфейс для создания объектов, но сам не знает, какие конкретные классы будут созданы.

   interface Logger {
public function log(string $message);
}

class FileLogger implements Logger {
public function log(string $message) {
echo "Logging to a file: $message";
}
}

class DatabaseLogger implements Logger {
public function log(string $message) {
echo "Logging to a database: $message";
}
}

abstract class LoggerFactory {
abstract public function createLogger(): Logger;
}

class FileLoggerFactory extends LoggerFactory {
public function createLogger(): Logger {
return new FileLogger();
}
}

$factory = new FileLoggerFactory();
$logger = $factory->createLogger();
$logger->log("Hello World");


🟠Абстрактная фабрика (Abstract Factory)
Этот шаблон используется для создания семейств взаимосвязанных объектов.

   interface GUIFactory {
public function createButton(): Button;
public function createCheckbox(): Checkbox;
}

class WindowsFactory implements GUIFactory {
public function createButton(): Button {
return new WindowsButton();
}
public function createCheckbox(): Checkbox {
return new WindowsCheckbox();
}
}

class MacOSFactory implements GUIFactory {
public function createButton(): Button {
return new MacOSButton();
}
public function createCheckbox(): Checkbox {
return new MacOSCheckbox();
}
}

$factory = new WindowsFactory();
$button = $factory->createButton();
$checkbox = $factory->createCheckbox();


🚩Как использовать фабрики?

Если вы работаете с приложением, где объекты часто меняются, например, в зависимости от окружения (Windows, MacOS).
Когда создание объектов сложное и требует дополнительной логики.
Когда нужно уменьшить зависимость между модулями.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое алгоритмическая сложность?

Алгоритмическая сложность описывает эффективность алгоритма в зависимости от объёма входных данных. Измеряется во времени выполнения (Time Complexity) и потреблении памяти (Space Complexity).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В чем преимущество hash индекс и btree индекс?

Hash-индексы и B-Tree-индексы являются двумя типами индексов, используемыми для ускорения операций поиска в базах данных. Оба типа имеют свои преимущества и недостатки в зависимости от конкретных сценариев использования.

🚩Hash-индексы

➕Быстрый доступ по точному совпадению
Hash-индексы обеспечивают очень быстрый доступ к данным при выполнении точных поисков (например, SELECT * FROM table WHERE column = 'value'). Время поиска практически константное (O(1)), что делает такие запросы очень эффективными.
➕Простота реализации
Hash-индексы просты в реализации и не требуют сложных структур данных для управления.

🚩B-Tree-индексы

➕Поддержка диапазонных запросов
B-Tree-индексы поддерживают операции поиска по диапазону и сортировку (например, BETWEEN, >, <, ORDER BY). Данные в B-Tree отсортированы, что делает такие запросы возможными и эффективными.

➕Сбалансированность
B-Tree автоматически поддерживает балансировку, что обеспечивает стабильную производительность для всех операций (поиск, вставка, удаление).

➕Универсальность
B-Tree-индексы поддерживают широкий спектр операций и типов данных, включая текстовые данные, даты и числа.

🟠Hash-индекс
Подходит для сценариев, где часто выполняются точные запросы равенства, например, поиск пользователя по уникальному идентификатору или email.
CREATE INDEX idx_email_hash ON users USING HASH (email);

SELECT * FROM users WHERE email = 'example@example.com';


🟠B-Tree-индекс
Подходит для сценариев, где часто выполняются диапазонные запросы, сортировка или комбинированные условия.
CREATE INDEX idx_name_btree ON users (name);

SELECT * FROM users WHERE name BETWEEN 'A' AND 'M';


Ставь 👍 и забирай 📚 Базу знаний
🤔 Разница между pull и fetch?

git pull выполняет fetch (загружает изменения из удалённого репозитория) и автоматически сливает их с локальной веткой. git fetch только загружает изменения, не изменяя локальные файлы, что позволяет вручную контролировать слияние.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥1
🤔 Что содержит инкапсуляция кроме сокрытия данных?

Инкапсуляция — это не только скрытие данных, но и ограничение доступа к внутренним деталям объекта + защита логики от внешнего вмешательства.

🚩Основные аспекты инкапсуляции

Сокрытие данных (private, protected).
Контроль доступа через геттеры и сеттеры.
Защита объекта от некорректных данных.
Чёткое API для работы с объектом.
Разделение ответственности внутри класса.

🟠Сокрытие данных (`private`, `protected`)
Скрываем внутренние переменные, чтобы их нельзя было изменить напрямую.
class User {
private string $password; // Прямой доступ запрещён

public function __construct(string $password) {
$this->password = $password;
}
}

$user = new User("123456");
// echo $user->password; // ❌ Ошибка! Доступ запрещён


🟠Контроль доступа через геттеры и сеттеры
Предоставляем доступ к данным через методы (контролируем поведение).
class User {
private string $password;

public function __construct(string $password) {
$this->setPassword($password);
}

public function getPassword(): string {
return "Секретный пароль скрыт"; // Никогда не выдаём оригинал
}

public function setPassword(string $password) {
if (strlen($password) < 6) {
throw new Exception("Пароль слишком короткий!");
}
$this->password = password_hash($password, PASSWORD_DEFAULT);
}
}

$user = new User("securePass");
// echo $user->password; // ❌ Ошибка! Доступ запрещён
echo $user->getPassword(); // ✅ "Секретный пароль скрыт"


🟠Защита объекта от некорректных данных
Инкапсуляция позволяет проверять данные перед их сохранением.
class Product {
private float $price;

public function setPrice(float $price) {
if ($price < 0) {
throw new Exception("Цена не может быть отрицательной!");
}
$this->price = $price;
}
}


🟠Чёткое API для работы с объектом
Инкапсуляция создаёт удобный интерфейс для работы с классом.
class Order {
private array $items = [];

public function addItem(string $item) {
$this->items[] = $item;
}

public function getItems(): array {
return $this->items;
}
}

$order = new Order();
$order->addItem("Телефон");
print_r($order->getItems()); // ✅ ["Телефон"]


🟠Разделение ответственности внутри класса
Инкапсуляция помогает отделить внутреннюю логику от интерфейса.
class BankAccount {
private float $balance = 0;

private function logTransaction(float $amount) {
echo "Транзакция: $amount\n";
}

public function deposit(float $amount) {
$this->balance += $amount;
$this->logTransaction($amount);
}

public function getBalance(): float {
return $this->balance;
}
}

$account = new BankAccount();
$account->deposit(100);
echo $account->getBalance(); // ✅ 100


Ставь 👍 и забирай 📚 Базу знаний
Пожизненная PRO подписка на easyoffer по цене одного года.

Акция до 20 февраля. Покупаешь сейчас один раз – пользуешься всю жизнь без лимита, включая все будущие функции.

Запланированные новые фичи на ближайшие пол года:
1. Агрегатор вакансий
2. Улучшение резюме, чтобы проходить ATS системы
3. Генерация уникального резюме и сопроводительного письма под вакансию

Покупай на https://easyoffer.ru/
🤔 В каких местах нельзя использовать Laravel как фреймворк?

1. Реалтайм-приложения: Laravel не идеален для высоконагруженных приложений с минимальной задержкой, например, игр.
2. Микросервисы: Laravel может быть избыточен из-за большого количества встроенных компонентов.
3. Проекты с крайне низким бюджетом: из-за сложности поддержки на минимальных конфигурациях серверов.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔3
🤔 Для чего предназначены форматы запросов и ответов приложения?

Форматы запросов и ответов в приложении предназначены для стандартизированного обмена данными между клиентом (браузером, мобильным приложением) и сервером (PHP-приложением). Они позволяют:

Обеспечить совместимость между разными системами
Облегчить обработку данных на сервере и клиенте
Структурировать данные в удобном формате

🚩Форматы запросов (Request Formats)

Когда клиент отправляет запрос на сервер, данные могут передаваться разными способами.

🟠GET – передача данных через URL
Используется для получения информации. Данные передаются в строке запроса.
GET /api/users?id=10


Пример обработки в PHP
$id = $_GET['id']; // Получаем id из URL


🟠POST – передача данных в теле запроса
Используется для отправки данных (например, формы).
POST /api/users
Content-Type: application/json

{
"name": "Иван",
"email": "ivan@example.com"
}


Пример обработки в PHP
$data = json_decode(file_get_contents("php://input"), true);
echo "Имя: " . $data['name'];


🟠PUT, PATCH, DELETE – для обновления и удаления данных
Используются в REST API для изменения или удаления данных.

🚩Форматы ответов (Response Formats)

Сервер отправляет ответ в определённом формате, который клиент сможет распознать.

🟠JSON – самый популярный формат
Используется в API и веб-приложениях.
{
"status": "success",
"message": "Данные получены"
}


Пример ответа в PHP
header("Content-Type: application/json");
echo json_encode(["status" => "success", "message" => "Данные получены"]);


🟠XML – используется в старых системах
Пример XML-ответа
<response>
<status>success</status>
<message>Данные получены</message>
</response>


🟠HTML – если сервер возвращает веб-страницу
Например, при загрузке сайта.
echo "<h1>Привет, мир!</h1>";


🟠Текстовый формат (Plain Text)
Если нужен простой текст
header("Content-Type: text/plain");
echo "Привет, это просто текст!";


🚩Как сервер определяет формат ответа?
Сервер анализирует заголовок Accept в запросе:
Accept: application/json


PHP может обработать это так:
$accept = $_SERVER['HTTP_ACCEPT'];
if (strpos($accept, "application/json") !== false) {
header("Content-Type: application/json");
echo json_encode(["message" => "Привет, JSON!"]);
} else {
echo "Привет, обычный текст!";
}


Ставь 👍 и забирай 📚 Базу знаний
🤔 Что реализует класс DateTime?

1. Класс DateTime в PHP предоставляет объектно-ориентированный способ работы с датой и временем.
2. Он позволяет создавать, изменять, форматировать и сравнивать даты.
3. Также включает функционал для работы с временными зонами через класс DateTimeZone.
4. Упрощает работу с датами благодаря методам, таким как add(), sub(), и форматированию с помощью format().


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как расшифровывается Rest?

REST расшифровывается как REpresentational State Transfer (Представленческая передача состояния). Это архитектурный стиль для создания сетевых приложений, который определяет набор ограничений и принципов для проектирования и взаимодействия с веб-службами.

🚩Основные принципы


🟠Клиент-серверная архитектура (Client-Server)
Клиент и сервер разделены. Клиенты запрашивают ресурсы, а серверы предоставляют их. Это разделение позволяет независимое развитие клиента и сервера.

🟠Отсутствие состояния (Stateless)
Каждое взаимодействие между клиентом и сервером не зависит от предыдущих взаимодействий. Вся необходимая информация для выполнения запроса должна быть включена в сам запрос.

🟠Кешируемость (Cacheable)
Ответы могут быть кешируемыми. Это улучшает производительность, снижая необходимость повторных обращений к серверу для получения одних и тех же данных.

🟠Единообразный интерфейс (Uniform Interface)
Определяет единообразный способ взаимодействия с ресурсами, независимо от конкретного клиента или сервера. Включает четыре подпринципа:
Идентификация ресурсов: Каждый ресурс имеет уникальный идентификатор (обычно URL).
Манипуляция ресурсами через представления: Клиенты взаимодействуют с ресурсами, используя их представления (например, JSON, XML).
Самоописываемые сообщения: Сообщения содержат всю необходимую информацию для обработки запроса или ответа.
Гипермедиа как движок приложения (HATEOAS): Клиенты получают информацию о доступных действиях через гиперссылки в ответах сервера.

🟠Слои (Layered System)
Архитектура может быть многослойной, где каждый слой имеет свои обязанности и скрывает сложность соседних слоев.

🟠Код по требованию (Code on Demand, необязательный)
Сервер может передавать исполняемый код клиенту для выполнения. Например, JavaScript для выполнения на стороне клиента.

🚩Пример REST

GET: Получить ресурс.
POST: Создать новый ресурс.
PUT: Обновить существующий ресурс.
DELETE: Удалить ресурс.

🚩Пример API


1⃣Получить список пользователей
GET /users


Ответ
      [
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"}
]


2⃣Получить пользователя по ID
GET /users/1


Ответ
      {"id": 1, "name": "Alice"}


3️⃣Создать нового пользователя
POST /users


Тело запроса
{"name": "Charlie"}


Ответ
{"id": 3, "name": "Charlie"}


4⃣Обновить информацию о пользователе
PUT /users/1   


Тело запроса
{"name": "Alice Smith"}


5⃣Удалить пользователя
DELETE /users/1


Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое поведение copy-on-write?

Это механизм оптимизации памяти, при котором копия объекта создаётся только в случае изменения исходного объекта. До изменений объекты разделяют один и тот же адрес в памяти.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое динамические переменные?

Это переменные, имена которых определяются во время выполнения программы. Это позволяет создавать, модифицировать или обращаться к переменным динамически, основываясь на входных данных или условиях выполнения программы. Такой подход может быть полезен в сценариях, где структура данных неизвестна на момент написания кода или когда нужно генерировать переменные на лету в зависимости от контекста выполнения.

🚩PHP

Имена переменных могут быть динамически сформированы с использованием переменных переменных
$name = "variable";
$$name = "Hello, World!";

echo $variable; // Выведет "Hello, World!"


Плюсы и минусы
➕Гибкость
позволяет создавать более адаптивные и динамические программы, которые могут работать с данными, структура которых заранее неизвестна.
➕Удобство
упрощает работу с большим количеством похожих переменных или свойств объекта без необходимости явного объявления каждой переменной.
➖Читаемость кода
использование динамических переменных может сделать код менее понятным и труднее для отладки, поскольку не всегда ясно, какие переменные создаются и используются.
➖Управление памятью
динамическое создание большого количества переменных может привести к неэффективному использованию памяти и снижению производительности.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое абстрактный класс?

Абстрактный класс — это класс, который не может быть создан как объект и служит для того, чтобы задавать общие свойства и методы для классов-наследников. Он может содержать как абстрактные, так и конкретные методы с реализацией. Наследники обязаны реализовать все абстрактные методы родительского класса. Абстрактные классы полезны, когда требуется частичная реализация с обязательной реализацией некоторых методов в дочерних классах.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что знаешь про нормальные формы в БД?

Нормальные формы (Normal Forms, NF) в базах данных — это правила, которые помогают организовать данные так, чтобы избежать избыточности и аномалий при обновлении, удалении и вставке.

🚩Основные нормальные формы

🟠Первая нормальная форма (1NF)
убирает повторяющиеся группы и делает все столбцы атомарными.
Что нужно сделать?
Каждое поле должно содержать только одно значение.
В таблице нет повторяющихся строк.

🟠Вторая нормальная форма (2NF)
убирает зависимости от части составного ключа.
Что нужно сделать?
Данные, которые зависят не от всего первичного ключа, вынести в отдельные таблицы.
Должна быть уже в 1NF.

🟠Третья нормальная форма (3NF)
убирает транзитивные зависимости.
Что нужно сделать?
Данные должны зависеть только от первичного ключа и не зависеть от других неключевых полей.
Должна быть уже в 2NF.

🚩Дополнительные нормальные формы

🟠Бойса-Кодда (BCNF)
более строгая версия 3NF, исключает случаи, когда таблица имеет несколько потенциальных ключей, но один из них влияет на другой.
🟠Четвёртая нормальная форма (4NF)
убирает многозначные зависимости (например, если студент изучает несколько предметов, но предметы никак не связаны друг с другом).
🟠Пятая нормальная форма (5NF)
разбиение таблицы на подтаблицы для минимизации избыточности данных.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Слово "global" для чего используется?

Слово global позволяет получить доступ к переменной, определённой за пределами текущей функции. Используется, чтобы модифицировать глобальные переменные внутри функций.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1