テーブル内のサイトのグローバルリポジトリを管理しています。ウェブサイトのパターンマッチング
ユーザーが保存したウェブサイトのIDを格納する参照表を保持しています。
userwebsite
userid, websiteid
[attributes of the table]
ユーザーがmicrosoftを保存したいとします。ウェブサイトはグローバルリポジトリに存在していないので彼のコレクションで、彼は
www.microsoft.com
に入り、それが最初のリポジトリに座った後、彼のコレクションに追加されます。今、両方のテーブルの内容は、次のようになります。
website:
id, name, url
1 google http://www.google.com/
2 CNN http://www.cnn.com/
3 SO http://www.stackoverflow.com/
4 msft http://www.microsoft.com
userwebsite:
userid, websiteid
1 4
は、ユーザーが彼のコレクションは、Googleの節約に興味があり、ウェブサイトが既にコレクションに存在しているとして、彼は
www.google.com
に入ると言いますコレクションにWebサイトを追加する代わりに、参照のみがユーザーコレクションに追加されます。
こだわっています、
両方www.google.comとhttp://www.google.com/
意味的には、同じサイトに指摘していますが、それらを一致しようとすると、彼らは2異なっている場所文字列。そのような場合にどのように文字列をマッチングさせるべきですか?
私が考えている解決策の1つは、ドメインがウェブサイトのコレクションに存在するかどうかを最初に確認することです(恐らくPATINDEXはここでうまくいくでしょう)。これにより、ドメイン名を保存するサイトのリストが表示されます。結果のウェブサイトにパスが存在するかどうかを確認します。これは良いアイデアですか?
この問題には大きな解決策がありますか?行くべきより良い方法はありますか?
DBに格納する前に何らかの形で「正規化」(小文字、http://を追加、末尾にスラッシュを追加、...)することはできませんか? –
@Matteo: 私はデータベースにSOをhttp://stackoverflow.comとして保存しました。ユーザーがhttp://www.stackoverflow.comとして追加されたので、このケースをどのように解決すればいいですか?また、私のテーブル内のすべてのURLにhttp:// "が追加されています。 – LearnCode
@LearnCode - SQLで文字列の照合を行うために、アドレスから 'http:// '部分を追加または削除する必要があります。SQLの文字列関数は単純な比較にしか対処できません。たとえば、アドレスの 'www.'部分を省略することもできますが、あなたのブラウザはまだウェブサイトを見つけることができます。' stackoverflow.com'で試してください;) – Tony