Привет.
Есть таблица. Со столбцами допустим id,phone.
phone- строка.
Поступило требование контролировать уникальность phone.
Вот думаю как покошерней это сделать, учитывая что раньше никакая уникальность там не гарантировалась. Ни на рабочем проекте, ни на тестовом. На тестовом так вообще постоянно один и тот же телефон вводился.
Просто так миграцией накатить уникальный индекс не получится.
Так как там есть совпадающие позиции.
Да даже и просто хватает позиций где хранится значение пустая строка, они тоже такой индекс не дадут создать.
С другой стороны в миграции переделывать данные в БД перед созданием уникального индекса выглядит как оверхед или нет?, т.к. придется:
- проставить null всем тем у кого сейчас ''
- объединять эту таблицу с собой по этому полю и всем дубликатам null что ли проставить...
Как бы вы вносили такие изменения в БД?
Re: Как бы вы вносили такие изменения в БД?
Добавить столбец в формате е164 и проверить на уникальность. Делов-то..
P.S. Ну и таки, да. Придется как-то заполнять не уникальные и пустые значения. Но в доп. столбце можно вести любые свои преобразования, в т.ч. и прямыми запросами к БД хоть с консоли.
На первичные данные с неуникальными значениями повесить unique key не получится от слова "совсем". Честно, честно.
P.P.S. Ну и ещё. Задание "контролировать уникальность" может относится к новым данным. В таком разе достаточно делать запрос на отсутствие и фсё. Новые не уникальные значения втыкаться перестанут, а старые .. может и фиг с ними?
P.S. Ну и таки, да. Придется как-то заполнять не уникальные и пустые значения. Но в доп. столбце можно вести любые свои преобразования, в т.ч. и прямыми запросами к БД хоть с консоли.
На первичные данные с неуникальными значениями повесить unique key не получится от слова "совсем". Честно, честно.
P.P.S. Ну и ещё. Задание "контролировать уникальность" может относится к новым данным. В таком разе достаточно делать запрос на отсутствие и фсё. Новые не уникальные значения втыкаться перестанут, а старые .. может и фиг с ними?
Все чаще Историки находят следы древней и очень высокоразвитой Цивилизации, со странными буквами .. СССР
Re: Как бы вы вносили такие изменения в БД?
В таких делах предпочитаю не создавать проблем на будущее, так что сделал вычистку того что мешало создать unique ключ.
Re: Как бы вы вносили такие изменения в БД?
Тоже правильно.
Все чаще Историки находят следы древней и очень высокоразвитой Цивилизации, со странными буквами .. СССР