В моем веб-приложении пользователь может определить документы и дать им уникальное имя, которое идентифицирует этот документ и дружественное имя, которое человек будет использовать для ссылки на документ. Возьмут следующую схему таблицы в качестве примера:Могу ли я использовать нечисловой первичный ключ для таблицы MySQL?
| id | name | friendly_name |
-----------------------------------------------
| 2 | invoice-2 | Invoice 2 |
В этом примере я использовал id
столбец в качестве первичного ключа, который является номером авто инкрементации. Так как это уже естественный идентификатор документов (name
) Я мог бы также сделать это:
| name | friendly_name |
--------------------------------------
| invoice-2 | Invoice 2 |
В этом примере name
является первичным ключом документа. Мы удалили поле id
, поскольку оно по сути является всего лишь дубликатом name
, так как каждый документ в таблице должен иметь уникальный name
в любом случае.
Это также означает, что когда я ссылаюсь на документ из отношения внешнего ключа, я должен был бы назвать его document_name
, а не document_id
.
Какова наилучшая практика в отношении этого? Теоретически для меня вполне возможно использовать VARCHAR
для первичного ключа, но он подходит для любых недостатков, таких как служебные служебные данные?
В чем преимущества? – Mihai
Преимущество состояло бы в том, что у меня есть меньше столбцов в таблице, которые в противном случае были бы просто дублирующими данными. –
Как бы вы увеличили это? Триггеры? Проблемы могут возникать.JOINs на varchar медленнее, чем на int.Larger size table.Larger index.Просто несколько вещей, чтобы думать. Также это может вас заинтересовать http: //en.wikipedia. org/wiki/Natural_key – Mihai