Что бы точно знать, что каждая строка в таблице уникальна - нужен первичный ключ. Первичные ключи делят на натуральные и суррогатные.
Натуральный первичный ключ:
Допустим таблица заказов состоит из 3-х столбиков:
Код:
Дата и время | Номер клиента | Описание заказа
--------------------+---------------+-------------------
2008-03-01 10:15:20 | 2 | Книга
2008-03-01 10:17:30 | 1 | Ручка
2008-03-01 10:18:10 | 3 | Стерка
В данной таблице 1 и 2 столбики вместе составляют Первичный Ключ.
Потому что они делают каждую запись (строчку) уникальной.
Докажем это:
Строка:
Код:
2008-03-01 10:17:30 | 1 | Ручка
будет уникальной, потому что клиент не должен иметь возможность сделать два заказа одновременно (в ту же секунду).
Одного времени (столбик 1) не достаточно что бы определить уникальность строки. Нужен еще стоблик 2.
Потому что два разных клиента могут заказать товар одновременно:
Код:
Дата и время | Номер клиента | Описание заказа
--------------------+---------------+-------------------
2008-03-01 10:17:30 | 1 | Ручка
2008-03-01 10:17:30 | 2 | Ручка
Что бы найти конкретную строку, вам надо знать по крайней мере: дату и номер клиента.
Если вы знаете только дату (или только клиента) - вы рискуете получить несколько строк.
Вместе: Дата и Номер клиента - это первичный ключ.
---------------------------------------------------------
Суррогатный первичный ключ:Не всегда удобно иметь первичный ключ состоящий из 2-х и более столбиков.
Потому что не всегда удобно искать строку по значениям 2-х и более столбиков.
Поэтому искусственно добавляют еще один столбик (например Номер заказа):
Код:
Номер заказа |Дата и время | Номер клиента | Описание заказа
-------------+--------------------+---------------+-------------------
1 |2008-03-01 10:15:20 | 2 | Книга
2 |2008-03-01 10:17:30 | 1 | Ручка
3 |2008-03-01 10:18:10 | 3 | Стерка
Здесь "Номер заказа" автоматически генерируется для каждого заказа (каждое число на единицу больше чем предыдущее.)
Теперь что бы найти конкретную строку - достаточно знать только "Номер заказа".
Это называется суррогатный первичный ключ. Потому что мы искусственно добавили столбик, что бы обеспечить уникальность строки.
Натуральный первичный ключ - это когда хватает самих данных что бы обеспечить уникальность строки.
--------------------------------------------------
Когда вы указываете что такой то столбик (или столбики) должен быть первичным ключем - вы задаете правило, которое база данных будет соблюдать:
- данные в столбике будут уникальны (если ключ - это один столбик)
- совокупность данных в столбиках будут уникальны (если ключ - это два и более столбиков)
И такие ошибочные ситуации возникнуть не должны:
Код:
Дата и время | Номер клиента | Описание заказа
--------------------+---------------+-------------------
2008-03-01 10:15:20 | 1 | Книга
2008-03-01 10:15:20 | 1 | Ручка
(неясно что клиент заказал: книгу или ручку?)
Или:
Код:
Номер заказа |Дата и время | Номер клиента | Описание заказа
-------------+--------------------+---------------+-------------------
1 |2008-03-01 10:15:20 | 1 | Книга
1 |2008-03-01 10:17:30 | 1 | Ручка
(Какой заказ истинный?)
Если задать первичный ключ - такие ситуации не возникнут.
Потому что база данных выкинет ошибку.
Если не указать первичный ключ - база не будет выкидывать ошибок и будет молча принимать все, что в нее пишут. А вы потом будете иметь головную боль разбирая данные.
-------------
"Натуральный первичный ключ", правильнее называть: "Естественный первичный ключ"
это на английском - Natural Primary Key