2012-06-28 6 views
0

Я создал таблицу: CREATE TABLE MyTable ( ID Int генерируемый всегда AS IDENTITY (не НАЧАТЬ С 1, Инкримент 1, NO CACHE) PRIMARY KEY, pcdurl VARCHAR (2000) NOT NULL )Максимальный размер уникального ограничения на DB2 9.7

И я хотел бы сделать атрибут pcdurl уникальным ограничением.

Но я получаю ошибку SQL 633. Я думаю, это потому, что размер превышает максимально допустимое число. Моим первым вопросом было бы то, что это за номер?

Here В нем указано число 255-n, где n - количество столбцов, допускающих нулевые значения.

Но я также читал на этом page: «максимальная общая длина столбцов в UNIQUE ограничение (поддерживается через уникальный индекс в байтах) 8192»

Так что мой второй вопрос будет как можно преодолеть эта проблема, сохраняя атрибут как уникальное ограничение ключа?

Большое спасибо заранее

ответ

0

По сути, вы будете иметь, чтобы найти меньшую respesentation в pdcurl так, что вы и обеспечить ограничение уникальности на этом представлении.

У вас может быть дополнительное поле, которое является хешем pdcurl, и сделать это хэшированное значение уникальным полем. В зависимости от функции хэширования у вас есть небольшой (возможно, крошечный) шанс столкновения. Но он всегда будет предотвращать дубликаты.

Или вы можете обнаружить, что все ваши URL-адреса начинаются с того же пути, и поэтому замените эту часть на .\ или что-то в этом роде?

+0

Большое спасибо за ответ, Демс. Но было бы лучше, если бы я смог найти решение без возможности столкновения. И та же часть URL-адресов имеет длину всего 10 символов. Но знаете ли вы, какой максимальный размер разрешен на 9,7? – BPL

+0

@BPL - Не так легко хэшировать. См. Этот ответ о вероятности столкновения с MD5 * (когда я говорю «крошечный», я действительно имею в виду крошечный) * http://stackoverflow.com/questions/201705/how-many-random-elements-before-md5-produces -collisions – MatBailie

+0

@BPL - И википедия показывает, что с MD5 (128 бит) вам нужно генерировать 26 000 000 000 значений, чтобы иметь шанс 0.0000000000000001%, что любой из них столкнулся с любым из других. * (Что лучше, чем большинство неудачных отказов afaik) * http://en.wikipedia.org/wiki/Birthday_attack – MatBailie

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