уникальный идентификатор против личности - PullRequest
4 голосов
/ 12 сентября 2009

Я заметил, что asp_membership использует uniqueidentifier, и мне показалось, что это пустая трата пространства, потому что я не мог придумать какую-то конкретную причину, чтобы не заменять его тождеством.

Однако SQL Server не позволяет мне изменить его на int. В нем говорится: «Преобразование из uniqueidentifier в int не поддерживается на подключенном сервере базы данных». После поисков в гугле кажется, что мне нужно было бы разорвать все отношения и т. Д., А затем вручную удалить столбец и заново добавить его как int. Ребята, вы знаете лучший подход?

Я не думаю, что буду иметь дело с несколькими базами данных, поэтому мне кажется, что uniqueidentifier мне не нужен. Ты согласен?

ОБРАТИТЕ ВНИМАНИЕ: я запускаю новое веб-приложение. Вы все еще думаете, что исправить это было бы ТАК сложно?

Также обратите внимание, что ни один из моих первичных ключей не будет частью моего URL.

Ответы [ 3 ]

12 голосов
/ 12 сентября 2009

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

Для этой идеи нет возврата инвестиций.

1 голос
/ 12 сентября 2009

Вы не можете преобразовать столбец UNIQUEIDENTIFIER в INT - вот что вам нужно сделать в этом случае:

  • добавьте ваш новый столбец ID как INT IDENTITY - это создаст и заполнит столбец значениями
  • удалить старый столбец GUID, который вам больше не нужен

Конечно, так как «UserID» является первичным ключом, и поэтому на него будут ссылаться из многих мест, вам придется много заниматься домашним хозяйством, прежде чем можно будет удалить столбец UserId.

Хотя я приветствую вашу идею и понимание того, что UNIQUEIDENTIFIER является действительно плохим выбором для первичного ключа и ключа кластеризации в таблице SQL Server, я думаю, что в этом конкретном случае я бы, вероятно, оставил это как есть - пытаясь преобразовать это повлечет за собой множество изменений во всех таблицах ASP.NET - вероятно, просто не стоит усилий.

Марк

0 голосов
/ 12 сентября 2009

Uniqueidentifier и int относятся к очень разным типам данных. Вы не можете просто изменить гид на Int. Вам нужно будет удалить все отношения, назначить числовые значения для родительской таблицы, добавить числовые столбцы для всех дочерних таблиц, использовать соединения, чтобы установить все значения в дочерних таблицах. Удалите все столбцы guid, сделайте столбец int первичным ключом. Настройте все отношения.

И не говоря уже об изменении каждого приложения, которое обращается к базе данных и ожидает, что значение будет guid, чтобы оно могло работать с целочисленным значением.

Вы смотрите на большую работу за очень небольшую выгоду.

Да, вы получите некоторое улучшение производительности, потому что направляющие не последовательны, а числа будут. Но этого на самом деле недостаточно для фактического внесения изменений, если вы не видите в этом серьезных проблем с производительностью.

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

...