Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / md5 от name в качестве PK / 5 сообщений из 5, страница 1 из 1
24.05.2014, 13:42:35
    #38650901
adVISeR007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
md5 от name в качестве PK
День добрый.

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

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

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

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

Как быть?

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

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

Код: 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
24.05.2014, 19:21:19
    #38651031
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
md5 от name в качестве PK
Коллейт только у поля должен быть соотвествующий, с постфиксом _ci (case insensetive)
...
Рейтинг: 0 / 0
24.05.2014, 20:46:24
    #38651073
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
md5 от name в качестве PK
Hett,

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


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