Таблица, строка, столбец и ключ простыми словами
В прошлых уроках мы уже несколько раз говорили «таблица», «строка», «столбец» и даже «ссылка на клиента». Пора назвать эти слова точно — они будут с нами весь курс. Ничего сложного: всё это привычные вещи из любой таблички, просто у них есть имена. Этот короткий урок наводит порядок в словах и в конце показывает, куда мы двинемся дальше.
Таблица, строка, столбец
Возьмём знакомый список товаров:
| id | name | price |
|---|---|---|
| 1 | Чайник | 2000 |
| 2 | Кружка | 500 |
| 3 | Ложка | 100 |
Таблица — это весь этот прямоугольник целиком. Таблица хранит данные об одной разновидности вещей. Здесь — о товарах. Заказы или клиенты жили бы в своих отдельных таблицах.
Столбец — это вертикальная колонка. У столбца есть имя (id, name, price) и он отвечает за один признак вещи. Столбец price хранит цены и только цены — у всех товаров сразу. Иногда столбец называют ещё полем или атрибутом, это синонимы.
Строка — это одна горизонтальная линия. Строка — это одна конкретная вещь целиком, со всеми её признаками. Вторая строка (2, Кружка, 500) — это вся информация про кружку. Строку называют ещё записью.
Запомни связку: таблица — про разновидность вещей (товары вообще), строка — про одну вещь (вот эта кружка), столбец — про один признак этой разновидности (цена). Это три разреза одних и тех же данных.
Зачем нужен ключ
Теперь главный новый термин — ключ. Посмотри на столбец id в таблице товаров: 1, 2, 3. Зачем он, если у товаров уже есть имена?
Представь, что у тебя два товара называются «Кружка» — синяя и белая. Если ссылаться на товар по имени, не разобрать, о какой кружке речь. Имя не различает их. А вот id различает: у синей кружки id = 2, у белой id = 7, и спутать невозможно.
Ключ — это столбец (или несколько), значение которого уникально для каждой строки и потому однозначно её опознаёт. Как номер паспорта у человека: имена и фамилии могут совпадать, а номер паспорта — нет. По ключу всегда можно ткнуть в ровно одну строку и не ошибиться. Поэтому в UPDATE products SET price = 600 WHERE id = 2 мы писали условие именно по id: так мы наверняка попадём в один товар, а не во все «кружки» сразу.
Хороший ключ обладает двумя свойствами: он уникален (у двух разных строк не бывает одинакового ключа) и он не пустой (у каждой строки ключ есть). Если эти два свойства выполняются, по ключу всегда можно безошибочно найти нужную строку.
Ключ связывает таблицы
Вспомни прошлый урок, где мы разделили один большой список на клиентов и заказы. В таблице заказов вместо телефона клиента мы поставили «ссылку на клиента». Теперь можно сказать точно: ссылка — это и есть ключ клиента, записанный внутри заказа.
Список клиентов:
| client_id | name | phone |
|---|---|---|
| 1 | Анна | 8-900-111 |
| 2 | Борис | 8-900-222 |
Список заказов:
| order_id | client_id | item |
|---|---|---|
| 1 | 1 | Чайник |
| 2 | 2 | Кружка |
| 3 | 1 | Ложка |
В заказах столбец client_id хранит не имя и не телефон, а ключ клиента — число 1 или 2. По этому числу всегда можно найти ровно одну строку в таблице клиентов и узнать имя и телефон. Заказы 1 и 3 ссылаются на client_id = 1 — значит, оба сделала Анна. Так ключ становится мостиком между двумя таблицами: телефон Анны по-прежнему хранится один раз, а заказы лишь указывают на неё ключом.
Именно так в базах данных и устроены связи: не дублированием данных, а ссылкой по ключу. Мы будем разбирать это подробно, но интуицию полезно поймать уже сейчас.
Куда дальше
Теперь у нас есть общий словарь: таблица, строка, столбец, ключ, ссылка по ключу. Этого хватит, чтобы говорить о моделировании предметно.
Дальше курс выходит на новый уровень. Сначала мы научимся смотреть на задачу глазами модельера: находить в реальности сущности (клиент, заказ, товар — каждая станет таблицей) и связи между ними (у клиента много заказов, у заказа один клиент). Потом перейдём к строгой реляционной модели — формальному фундаменту, на котором стоят все реляционные базы данных, и к понятию ключа уже в полную силу. Те же таблица, строка и столбец получат точные определения, а интуиция «один факт — в одном месте» превратится в систему правил.
Первичные и внешние ключи в SQLПопробуй сам
Вернись к двум таблицам (клиенты и заказы) из бумажного разбора прошлого урока — или составь новую пару, например список авторов и список книг. Для каждой таблицы выпиши: какой столбец служит ключом (по какому признаку строка опознаётся однозначно) и убедись, что значения этого столбца не повторяются. Затем найди столбец, который в одной таблице является ссылкой на ключ другой (как client_id в заказах), и покажи стрелкой на бумаге, к какой строке он ведёт. Наконец, объясни себе словами, почему хранить ссылку по ключу лучше, чем повторять имя и телефон в каждой строке. Сохрани разбор — это прямая разминка перед модулем про сущности и связи.