Перемещение от ints до GUID как первичные ключи

Вот документация О создании из Android. Обратите внимание, что если вы переопределите этот метод, вы должны обратиться к реализации суперкласса. что делается следующим образом:

super.onCreate(savedInstanceState);

После этого вам нужно надуть ваше представление, используя метод setContentView(). который будет устанавливать содержание деятельности из ресурса макета:

setContentView(R.layout.activity_main);

Теперь вы сможете получать виджеты в том интерфейсе (activity_main), с которым вам нужно взаимодействовать программно.

7
задан ConcernedOfTunbridgeWells 8 October 2008 в 15:44
поделиться

8 ответов

  • Создайте новый столбец для значения гуида в основной таблице. Используйте тип данных uniqueidentifier, сделайте его не пустым с newid () значение по умолчанию, таким образом, все существующие строки будут заполнены.
  • Создайте новые uniqueidentifier столбцы в дочерних таблицах.
  • Выполненные операторы обновления для создания отношений гильдии с помощью exisitng международных отношений для ссылки на объекты.
  • Отбросьте исходные международные столбцы.

Кроме того, уезжайте, некоторое пространство в Ваших данных/индексных страницах (укажите fillfactor <100), поскольку гуиды не последовательны как международные столбцы идентификационных данных. Это означает, что вставки могут быть где угодно в диапазоне данных и вызовут расщепления страницы, если Ваши страницы на 100% полны.

11
ответ дан 6 December 2019 в 09:23
поделиться

Во-первых: Дорогой Бог, почему?!?!?

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

Для обновления значения, Вы сделали бы что-то как

  1. Установите новые GUID в таблице первичного ключа
  2. Выполнение это:

.

UPDATE foreignTable f
SET f.guidCol = p.guidCol
FROM primaryTable p
WHERE p.intCol = f.intCol
4
ответ дан 6 December 2019 в 09:23
поделиться

Это релевантно в системе, которая реализует модель распределенных вычислений. Если система потребуется, чтобы знать первичный ключ в то время, когда Вы сохраняете информацию в системе, использование первичного ключа автопостепенного увеличения, сохраняемого ОДНИМ обработчиком, замедлит систему. Вместо этого Вам нужен механизм как генератор GUID для создания первичного ключа (имейте в виду, что истинной функцией первичного ключа является своя уникальность). Так, я могу увеличиться с многочисленными услугами, каждый создающий его первичный ключ, друг независимо от друга.

У меня было сомнительное полномочие выполнения этого прежде и в основном что я должен был сделать, должен был экспортировать целую проклятую базу данных в XML. Затем, у меня было JAVA-приложение, которое использует java.util. nextLong Random () функционируют для замены первичного ключа их новыми ключами гуида. После этого я импортировал все это, въезжают задним ходом к базе данных.

Конечно, в первый раз, когда я пытался импортировать XML-файлы назад, я забыл выключать функцию автонумерации поля первичного ключа, научитесь на моих ошибках. Я уверен, что существуют лучшие способы сделать его, но это было быстрым и грязным способом сделать его..., и это работало. В случае, если Вы удивление, проект состоял в том, чтобы подать заявку масштабироваться.

3
ответ дан 6 December 2019 в 09:23
поделиться

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

  • Копируйте "международные" столбцы PK/FK с новыми столбцами "гуида".
  • Генерирует новые значения для столбцов PK "гуида".
  • Обновление оценивает в столбцах FK "гуида" с заданными значениями (Вы находите записи через "международный" PK).
  • Удалите ссылки (отношения) с "международными" столбцами PK/FK.
  • Создайте подобные ссылки (отношения) со столбцами PK/FK "гуида".
  • Удалите "международные" столбцы PK/FK.
0
ответ дан 6 December 2019 в 09:23
поделиться

Забавный я думаю, что должен сделать полную противоположность из-за другой проблемы...

Как может использовать SQLBulkCopy на таблице с первичным ключом GUID и значением по умолчанию newsequentialid ()?

0
ответ дан 6 December 2019 в 09:23
поделиться

Да, я с Glenn... Я на самом деле колебался при регистрации того же самого, прежде чем он отправил его....

Почему Вы не хотели бы автоматического инкрементного международного первичного ключа, отдельного от Вашего GUID? это намного более гибко, и можно было просто индексировать столбец GUID, таким образом, у Вас есть хорошая производительность на Ваших запросах...


Что касается гибкости, мне нравится сохранять мой идентификатор как автоинкремент ints, потому что затем другой на вид уникальный и первичный ключ достойный объект может измениться.

Большой случай гибкости - то, если Вы используете имена пользователей в качестве первичного ключа. Даже если они уникальны, хорошо смочь изменить их. Что, если пользователи используют адрес электронной почты в качестве своего имени пользователя? Способность изменить имя пользователя и иметь его не влияет на все Ваши запросы, большое плюс, и я подозреваю, что то же могло быть верным с Вашими GUID....

2
ответ дан 6 December 2019 в 09:23
поделиться

Это - очень хороший выбор. Я переключился от longs до UUID для одного из моих приложений, и я не сожалею о нем. При использовании SQL Server MS, он включен в стандарт (я использую postgresql, и он только включен в стандарт от 8,3 на).

Как упомянутый Glenn Slaven, можно воссоздать UUID от ключей, которые Вы имеете в своих текущих записях. Знайте, что они не будут уникальны, хотя но что путь легко сохранить отношения в целости. Новые записи, которые Вы создаете после перемещения, будут уникальны.

0
ответ дан 6 December 2019 в 09:23
поделиться

Не ДЕЛАЙТЕ ЭТОГО! Мы начали использовать GUID, и теперь мы почти закончили перемещаться в INTs как PKs; мы сохраняем GUID для входа целей (и для некоторых таблиц, er, "договорная реляционная целостность" ;)), но увеличение скорости использования ints было феноменально.

Это только действительно стало очевидным, когда таблица rowcounts пересеклась в миллионы, заметьте.

Наше самое большое безумие безусловно использовало NEWID () как PK нашей (последовательной) таблицы журнала - было много порки головы, когда мы поняли нашу ошибку.

0
ответ дан 6 December 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: