February 21

Базы данных на пальцах

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

вот банальный пример из двух таблиц

Ну что ту может быть не понятного - на первый взгляд все понятно.

Хрен там плавал. Это конечный вид представления данных для человеков. Но для понимания сути он не годится.

Изменим визуализацию первой таблицы для наглядности

По факту, первых таблиц столько, сколько данных у нас есть. Каждая первая таблица это карточка - это как один фрейм (кадр)

Поменял местами, что бы было интереснее

Есть такой термин в базах данных - Нормализация.

Нормализация - правило хорошего тона. Берем строку которая встречается в разных таблицах. Таблица в которой эта строка указана без повторений, будет первая. (Порядок таблиц имеет значение - аксиома)

В нашем примере это название пекарни. В заказах название пекарни например "Хлебный дом" встречается не один раз.

А вот в таблице bakeries (пекарни) по одному разу

это и будет первая таблица

Продолжаем нормализовать. В таблице orders (заказы) убираем название пекарен и вписываем айди этих пекарен из таблицы bakeries (пекарни)

Супер, тем самым мы не потеряв названия пекарен сократили размер DB. Это сэкономит кучу гигабайт в огромных базах, а чем база легче, тем быстрее работает поиск по ней.

Первую таблицу мы представили как 3 фрейма - кадры с разными данными. Этих фреймов может быт много. Что-бы эти фреймы отличать, у таблиц всегда есть id в первой строке. Из других таблиц нужно как-то ссылаться на эту первую/главную таблицу. И поле id в первой строке, это как место куда цепляется другие таблицы. Визуализируем

То место куда цепляется другие таблицы к первой таблице называется Первичным Ключом - Примари Кей - PK

а строка которая ссылается на Примари Кей - PK называется - Внешний Ключ - Foreign Key - FK а еще у Foreign Key - FK принято добавлять id к названию (правило хорошего тона)

Направление всегда одно: FK смотрит на PK
внешний ключ FK → главный ключ PK

Почему так ? Заказ (FK) говорит
"я от Хлебного дома, его id = 1".
Хлебный дом (PK) ничего не знает о заказах — он просто существует. Инициатива всегда от FK.

Теперь когда я вник в суть, я с листа могу читать базу SQL

CREATE TABLE bakeries (
    id INTEGER PRIMARY KEY,
    название TEXT,
    телефон TEXT
);

CREATE TABLE orders (
    id INTEGER,
    название_id INTEGER,
    изделие TEXT,
    кол_во TEXT,
    FOREIGN KEY (название_id) REFERENCES bakeries(id)
);


📱 Telegram канал: NaitLAB | Что-то на умном – @NaitLAB
💡 Ковыряюсь в сложном, рассказываю на простом