Как бы вы вносили такие изменения в БД?

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Как бы вы вносили такие изменения в БД?

Сообщение maleks »

Привет.
Есть таблица. Со столбцами допустим id,phone.
phone- строка.
Поступило требование контролировать уникальность phone.
Вот думаю как покошерней это сделать, учитывая что раньше никакая уникальность там не гарантировалась. Ни на рабочем проекте, ни на тестовом. На тестовом так вообще постоянно один и тот же телефон вводился.
Просто так миграцией накатить уникальный индекс не получится.
Так как там есть совпадающие позиции.
Да даже и просто хватает позиций где хранится значение пустая строка, они тоже такой индекс не дадут создать.

С другой стороны в миграции переделывать данные в БД перед созданием уникального индекса выглядит как оверхед или нет?, т.к. придется:
- проставить null всем тем у кого сейчас ''
- объединять эту таблицу с собой по этому полю и всем дубликатам null что ли проставить...
Yii2 universal module sceleton - for basic and advanced templates
Arhat109
Сообщения: 61
Зарегистрирован: 2016.11.23, 09:06
Откуда: из СССР

Re: Как бы вы вносили такие изменения в БД?

Сообщение Arhat109 »

Добавить столбец в формате е164 и проверить на уникальность. Делов-то..

P.S. Ну и таки, да. Придется как-то заполнять не уникальные и пустые значения. Но в доп. столбце можно вести любые свои преобразования, в т.ч. и прямыми запросами к БД хоть с консоли.

На первичные данные с неуникальными значениями повесить unique key не получится от слова "совсем". Честно, честно. ;)

P.P.S. Ну и ещё. Задание "контролировать уникальность" может относится к новым данным. В таком разе достаточно делать запрос на отсутствие и фсё. Новые не уникальные значения втыкаться перестанут, а старые .. может и фиг с ними? ;)
Все чаще Историки находят следы древней и очень высокоразвитой Цивилизации, со странными буквами .. СССР
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Как бы вы вносили такие изменения в БД?

Сообщение maleks »

В таких делах предпочитаю не создавать проблем на будущее, так что сделал вычистку того что мешало создать unique ключ.
Yii2 universal module sceleton - for basic and advanced templates
Arhat109
Сообщения: 61
Зарегистрирован: 2016.11.23, 09:06
Откуда: из СССР

Re: Как бы вы вносили такие изменения в БД?

Сообщение Arhat109 »

Тоже правильно.
Все чаще Историки находят следы древней и очень высокоразвитой Цивилизации, со странными буквами .. СССР
Ответить