2011-07-22 7 views
0

テーブル内のサイトのグローバルリポジトリを管理しています。ウェブサイトのパターンマッチング

ユーザーが保存したウェブサイトの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はここでうまくいくでしょう)。これにより、ドメイン名を保存するサイトのリストが表示されます。結果のウェブサイトにパスが存在するかどうかを確認します。これは良いアイデアですか?

この問題には大きな解決策がありますか?行くべきより良い方法はありますか?

+0

DBに格納する前に何らかの形で「正規化」(小文字、http://を追加、末尾にスラッシュを追加、...)することはできませんか? –

+0

@Matteo: 私はデータベースにSOをhttp://stackoverflow.comとして保存しました。ユーザーがhttp://www.stackoverflow.comとして追加されたので、このケースをどのように解決すればいいですか?また、私のテーブル内のすべてのURLにhttp:// "が追加されています。 – LearnCode

+1

@LearnCode - SQLで文字列の照合を行うために、アドレスから 'http:// '部分を追加または削除する必要があります。SQLの文字列関数は単純な比較にしか対処できません。たとえば、アドレスの 'www.'部分を省略することもできますが、あなたのブラウザはまだウェブサイトを見つけることができます。' stackoverflow.com'で試してください;) – Tony

答えて

1

この場合、パターンマッチングは必要ありません。あなたが本当に求めていること(Matteoがコメントしたことから続ける)は、Webアドレスを検証して一貫性のある方法で保存する方法です。しかし、正規表現で少なくともアドレスが有効かどうかを確認するには、http://www.shauninman.com/archive/2006/05/08/validating_domain_names

を使用するか、SQLサーバーの外部でどの言語を使用しているのかはわかりませんが、Javascript to validate itを使用してください。

ほとんどの場合、ドメイン名をドメインネームサーバーに送信して解決する必要があります。彼らがウェブアドレスであるという事実を無視して、単に文字列として考えるほうが良いでしょう。たとえば、人々の名前がデータベースで正しく比較されるようにするにはどうすればよいでしょうか?最初のステップは通常、大文字または小文字が使用されていることを確認することです。それ以降は省略することができるミドルネーム/イニシャルを扱うなど、より難しくなります。

+0

いいえ、私は検証する必要はありません私が必要とするのは、ウェブアドレスを格納する一貫した方法です。私がMatteoにコメントしたとき、私はデータベースにstackoverflow.comとしてSOを保存しました。あなたがstackoverflow.comとしてSOを追加したとしましょう。 、私の大きな問題はこれです、どうすれば解決できますか? – LearnCode

+0

実際にはt私がここに書いたスクリプト(http://stackoverflow.com/questions/6414417/invalid-urls-throw-an-exception-python/6423713#6423713)は、Webサイトの検証に似た何かをしています。 – LearnCode

+0

私がそれらを検証することは、入力したアドレスを見つけるためにWebブラウザが行う鉱山に沿ったものです。あなたのブラウザに 'SO'をタイプした場合、' stackoverflow.com'に行くと思いますか?おそらくそうではありません。あなたは非常に多くのケースを捉えることができます。ウェブアドレスを入力する際に​​ユーザが賢明であることを期待しなければなりません。もしwww.microsoft.comを保存したいのであれば、私は単にMSと入力しません。 – Tony

関連する問題