2015-07-14 4 views
0

У меня есть таблица MySQL, в которой есть пять столбцов местоположения (Лос-Анджелес, Нью-Йорк и т. Д.), Которые имеют значение столбца окрестности, код, который относится к местоположению (LA, NY и т. Д.).) и идентификатор пользователя. Код и идентификатор пользователя всегда присутствуют, и по крайней мере один из столбцов местоположения имеет значение.mysql динамически добавляет уникальное ограничение

В идеале я хотел бы, чтобы нормализовать эту table-, но как краткосрочное решение, я хотел бы добавить ограничение, которое говорит:

«обеспечивает уникальное сочетание USERID, кода и местоположение «.

Например:

Row1: имеет идентификатор пользователя = 1, код = NY, Нью-Йорк = Бруклин, Лос-Анджелес = Chinatown
row2: имеет идентификатор пользователя = 1, код = NY, New Йорк = Вест-Сайд, Лос-Анджелес = Китайский квартал

Вторая строка должна быть разрешена для вставки, поскольку район Нью-Йорка отличается.

я пробовал регулярные ограничения:

места ТАБЛИЦА ALTER ADD UNIQUE location (user_id, code, new_york); (user_id, code, los_angeles);

, но вторая строка не вставлена, потому что второе ограничение выше останавливает его.

Не удалось нормализовать таблицу, каков наилучший вариант для создания этого ограничения?

+0

Не создавало бы уникальное ограничение на user_id, код и все столбцы местоположения, решив вашу проблему? "ALTER TABLE местоположения ADD UNIQUE location (user_id, code, new_york, los_angeles, ...);" –

+0

@ jedrzej.kurylo Это должно работать, если он использует NULL в столбцах «другого» местоположения; если он использует что-то вроде '' (пустая строка) или жестко закодированная строковая константа, такая как «[IRRELEVANT]», которая может быть его проблемой сейчас. – Uueerdo

ответ

-1

Создание таблицы с городами
ID | город
1 | Нью-Йорк
2 | Лос-Анджелес
.. | ..

и изменить расположение таблицы добавить внешний ключ к этой таблице и установить первичный ключ (идентификатор, код, город)

ID | код | город
1 | 345 | 1 < - Это Нью-Йорк
1 | 123 | 1
.. | .. | ..

+0

Я не вижу, как это устранит проблему с уникальным ограничением. –

+0

if (id, code, city) является первичным ключом, является уникальным! – user3442483

Смежные вопросы