2010-07-07 2 views
2

Я создаю механизм комментариев в приложении, который позволяет разработчику/разработчику плагина реализовать потоки комментариев простым способом.Методы использования длинного ключа varchar в качестве ключевого ключа

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

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

insertCommentThread('myimages:340'); 

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

insertCommentThread('wiki-entry-page-name-it-could-be-long'); 

Так разработчик может назвать нити любое имя, которое им нравится.

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

Так что мой вопрос ...

Есть ли способ хранить ключ строки в некотором закодированном способе так, что она становится все меньше и быстрее для поиска?

(я мог хэш строки, но читаемость базы данных теряется ...)

кстати. Я использую MySQL

ответ

1

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

0

Я думаю, вы хотели бы, чтобы этот столбец был уникальным индексированным полем .. не основным ключом.

+0

Таким образом, вы бы редко использовали его как поиск ... (Если мои предположения верны) – Fosco

+0

извините, вот что я имел в виду. отредактирует: P – arnorhs

+0

исправлено.спасибо за помощь – arnorhs

1

Зачем вам нужно сделать строку поиска первичным ключом?

Я бы использовал числовой первичный ключ для скорости и отдельное уникальное поле поиска для длинной строки.

Вам, скорее всего, придется сделать двойную проверку, прежде чем вставлять запись, и найти замену, если проверка не удалась. Я не уверен, насколько ограничение mySQL UNIQUE поможет вам здесь.

+0

авария. исправлено – arnorhs

+0

+1: Точно. Кроме того, что, если название изменяется - как вы относите комментарий к правильной теме? –

0

Я бы предложил построить функции с двумя параметрами. Один для комментария введите и один для уникального комментария itselfe:

insertCommentThread('images', '340'); 
insertCommentThread('wiki', 'entry-page-name-it-could-be-long'); 

БД я проектировал бы то вроде этого:

ID (int) - GROUP (varchar) - NAME (varchar) 
PriKey: ID 
Unique: (Group + Name) 

Таким образом, вы можете ограничить запрос на модуль (комментарийВведите) в настоящее время загружается, и также возможно иметь один и тот же комментарий в разных группах.

+0

будет ли медленнее запрашивать два отдельных ключа varchar вместо одного, когда вы вставили много данных? – arnorhs

+0

Если у вас есть указатель на оба ключа varchar, это не имеет значения. – JochenJung