powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / md5 от name в качестве PK
5 сообщений из 5, страница 1 из 1
md5 от name в качестве PK
    #38650901
adVISeR007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.

В БД планируется хранить артистов, треки, альбомы, логи прослушивания и т.д.

Проблема с артистами состоит в том, что нужно проверять их на уникальность при добавлении (база постоянно дополняется). Исполнители могут быть добавлены просто списком, соответственно могут быть дубли.

При этом могут быть ситуации, когда название групп/треков/альбомов может отличаться только регистром или содержать какие-то спец символы и прочее. Очень часто из-за этого возникают проблемы и используется md5(name) в качестве идентификатора на уровне кода (в memcached, например).

С другой стороны использовать md5 в качестве PK не есть хорошо, ибо зависит от имени и гораздо больше накладные расходы, в том числе и размеры индексов будут больше, чем в случае int.

Как быть?

Была мысль использовать в качестве PK сурогатный int (соответственно в связях и выборках использовать его), а уникальность проверять по дополнительному полю с md5 и его же использовать для кэширования. Но по сути получается, что храним 2 ключа %)
...
Рейтинг: 0 / 0
md5 от name в качестве PK
    #38650904
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нужно ни PK, ни md5.
Сделайте обычный справочник с текстовым полем и сделайте на него уникальные индекс.
Если нужно будет одновременно и хранить оригинальное название, и соблюдать регистронезависимую уникальность, то два поля - оригинальное название и название, приведенное к одному регистру и выброшенными небуквенными символами. И уникальный индекс на второе поле.

А PK - обычный автоинкрементный.
...
Рейтинг: 0 / 0
md5 от name в качестве PK
    #38651028
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо ничего приводить даже

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
mysql> use test;
Database changed

mysql> create table p (id int unsigned not null auto_increment primary key, name text not null);
Query OK, 0 rows affected (0.58 sec)

mysql> alter table p add unique index(name(128));
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into p values (null, 'Baskov Kolya');
Query OK, 1 row affected (0.00 sec)

mysql> insert into p values (null, 'baskov Kolya');
ERROR 1062 (23000): Duplicate entry 'baskov Kolya' for key 'name'
...
Рейтинг: 0 / 0
md5 от name в качестве PK
    #38651031
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллейт только у поля должен быть соотвествующий, с постфиксом _ci (case insensetive)
...
Рейтинг: 0 / 0
md5 от name в качестве PK
    #38651073
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

Одним коллейтом в таких задачах обычно не обойдешься. Зачастую еще нужно вычищать всякие точки, запятые и прочие знаки препинания.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / md5 от name в качестве PK
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]