2014-10-03 3 views
0

В этом случае: если у меня есть таблица «Пользователи», пользователи с подписью по умолчанию и подпиской facebook.Таблица пользователей из разных источников

Table users 
id | name 
1 John (default) 
2 Carl (default) 
111 Steven (facebook) 
... 
111 Wayne (default) 

Если идентификатор автоматическое приращение и уникальное, когда СУБД будет пытаться вставить идентификатор 111 из умолчанию зарегистрируется, я получу ошибку из-за уникальное ограничение, поскольку идентификатор 111 вставил вручную. Таким образом, СУБД должна знать, существует ли идентификатор 111, следующий знак по умолчанию должен быть 112, а не 111.

Есть ли способ избежать этой ошибки? Или как лучше всего справляться с подобными случаями?

Сделать две таблицы пользователей кажутся чересчур сложными, просто чтобы избежать этой проблемы.

ответ

1

Вот два альтернативных подхода.

Во-первых, если пользователь может зарегистрироваться только двумя способами, у вас могут быть отдельные столбцы для каждого. Таким образом, users таблица будет иметь столбцы, такие как:

  • DefaultDateTime
  • FacebookDateTime

и так далее, для любых колонок, которые вы хотите. Когда пользователь регистрируется во втором порядке, вы обновляете существующую запись, а не вставляете новую.

Второй способ, вероятно, лучше. Есть две таблицы:

  • Пользователи
  • Signups

В таблице Signups будет иметь отношение внешнего ключа обратно к Users таблицы (возможно, с NOT NULL ограничением). Обе таблицы будут иметь автоматически увеличивающиеся целые первичные ключи.

По-видимому, в вашей модели данных регистрация не зависит от пользователей, поэтому вы должны моделировать их отдельно. Тогда вы можете иметь столько подписчиков, сколько хотите для данного пользователя.

0

Maby вы можете попытаться получить значение MAX ID из базы данных и добавить +1 к следующей вставке. Таким образом, вы всегда будете получать значение над текущим значением.

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