Я сталкиваюсь с решением о том, как хранить URL (закладки) в таблице.У меня есть следующие требования:
Клиент должен иметь возможность искать название закладки.
Я решил использовать FTS с опцией ранжирования для этого требования
Клиент должен иметь возможность искать адрес
Здесь у меня есть сомнения относительно того, как хранить URL.Прежде всего, URL-адреса должны быть уникальными в моей таблице.Это потенциально может быть очень большой стол.Там не будет никаких обновлений или удалений в этой таблице.Я имел в виду следующее:
ID [int] IDENTITY(1,1) -- identity and foreign key in other table(s)
Title [nvarchar](500) -- title (FTS)
CompleteURL [nvarchar](300), -- Unique index example: http://www.bbc.co.uk
URLPrefix [nvarchar](20), -- example: http://www
URLSufix [nvarchar](280), -- example: bbc.co.uk/something (index)
Я понимаю, что у меня есть дублирование данных, но у меня нет проблем с этим, поскольку здесь речь идет о целостности данных (без обновлений и удалений) и важна производительность.Я думал использовать CompleteURL в качестве моего IF EXISTS во время вставки.Я не уверен, что этот подход обеспечит лучшую производительность, чем составной ключ для URLPrefix и URLSufix и полностью потеряет CompleteURL ?
URLSufix обеспечит быстрый поиск для параметра поиска LIKE 'bbc%' .
Но что, если клиент выполнит поиск LIKE 'www.bbc%' ?Никаких подстановочных знаков в начале строки (% bbc%) не может быть и речи, так как я не могу позволить себе сканирование всей таблицы.
Кроме того, я решил переместить URL-адреса длиннее (300) в другую таблицу, так как там больше99,9% URL-адресов не такие длинные, и я не хочу превышать ограничение в 900 байт.Это хорошая практика?
РЕДАКТИРОВАТЬ:
Короче говоря.Как бы вы сохранили эту закладку
BBC Homepage title
http://www.bbc.co.uk/
, если хотите, чтобы она возвращалась, когда параметр поиска является одним из 3 случаев:
1. 'homepage'
2. 'bbc.co'
3. 'www.bbc.co'