JavaScriptかデータベースの保存データでURLを生成したいのですが、アドバイス頂いた際にデータベースの保存データの方が一般的で良いのではないかと教えて頂きました。
Javascriptのランダム文字列についても別の方に詳しくお聞きしたところ、そちらの方がセキュリティ上は良さそうな気がしております。
どちらが良いか決めかねているためアドバイスお願い致します。
・Javascriptについて、生成したURLをデータベースに保存する方法で、データベースがURLを持っているのでそのまま使えて楽です。
リンクURLにも使えるし、アクセスされたURLからその質問をデータベースから読み出すこともできます。
・データベースの保存データについて、データベースに保存されているIDなどから生成する方はURLをデータベースに保存しなくていいはずです。
データベースがURLを持っていないためその都度生成処理や復号処理が必要です。
リンクURLを出力する、アクセスされたURLからIDなどへ復号(戻す)してからその質問をデータベースから読み出す必要があります。
URLをデータベースに保存してもいいとは思いますが、それならJavaScriptで生成するのと変わりありません。
※JavascriptでURLを生成する方法
https://mebee.info/2022/11/05/post-84690/
https://k-sugi.sakura.ne.jp/javascript/5355/
No.5ベストアンサー
- 回答日時:
> 指しているIDというのは同一のURLのことでしょうか?
URLでもデータベースでも関係ありません。
修正/削除/表示する記事を指定するためには、データベース上で他の記事とは絶対に重複しない値または文字列が必要です。
今回はその「絶対に重複しない値または文字列」を「ID」と書きました。
> (1)の方法でないとデータベースのみで作成するのは難しいという認識であってますでしょうか?
ちょっと違います。
データベースのストアードプロシージャを「データベースの機能」と捉えれば、(2)の方法も「データベースのみ」で作成可能です。
方法自体はどちらも簡単です。
難しいのは、他の邪魔が入らないようにすることです。
アドバイスありがとうございます、(1)の方法をとることにしたのですが、UUIDで一意のIDを生成したいと考えております。
UUIDは重複する確率が低いとは言え、重複しないとは言い切れないためUNIQUE KEY を指定するつもりです。
こちらの方法で問題ないでしょうか?
https://imgur.com/NNIWmBD.jpg
https://imgur.com/jHiDTJk.jpg
https://imgur.com/d0cxxmr.jpg
No.3
- 回答日時:
JavascriptでIDを生成する場合、「そのIDが一意である」ことを保証するのが困難です。
ランダムだろうと連番だろうと関係ありません。
一意なIDの作り方には、主に次の2つがあります。
(1) データベースシステムが持つ仕組みを利用する(シーケンス、自動インクリメント等)
(2) IDを生成→既存のデータと比較 → 存在しなければ採用、存在していたら生成からやりなおし
どちらの場合でも「処理の間、他の邪魔が入らない」ことが重要です。
(1)の方はシステムで保証されています。
(2)の方ですが、例えば
ブラウザ1でID=1を確認;存在しない
ブラウザ2でID=1を確認;この時点ではブラウザ1で採用されていないので「存在しない」
ブラウザ1でID=1を採用
ブラウザ2でID=1を採用;確認時点では存在していなかった
ということが発生する可能性があります。
また
ブラウザ1でID=1を生成
ブラウザ2でも新規でID=1を生成→ ブラウザ2で確認→採用
ブラウザ1で確認→ID=1は使われているので不採用でやりなおし
ブラウザ1でやりなおしでID=2を生成
ブラウザ3でも新規でID=2を生成→ ブラウザ3で確認→採用
ブラウザ1で確認→ID=2は使われているので不採用でやりなおし
ブラウザ1でやりなおしでID=3を生成 ...
と無限ループになる可能性も0ではありません。
データベースシステムにはトランザクションという「他に邪魔されない」仕組みがあります。
これを使えば(2)の方法でも邪魔されないことが保証できます。
ですが、これは データベース接続→トランザクション開始→処理→トランザクション終了→データベース切断 とする必要があり、これをサーバーとブラウザという仕組みでやるのは困難です。
Q.JavascriptでIDを生成する場合、「そのIDが一意である」ことを保証するのが困難です。
ランダムだろうと連番だろうと関係ありません。
A.アドバイスありがとうございます、指しているIDというのは同一のURLのことでしょうか?
Q.一意なIDの作り方には、主に次の2つがあります。
(1) データベースシステムが持つ仕組みを利用する(シーケンス、自動インクリメント等)
(2) IDを生成→既存のデータと比較 → 存在しなければ採用、存在していたら生成からやりなおし
どちらの場合でも「処理の間、他の邪魔が入らない」ことが重要です。
(1)の方はシステムで保証されています。
(2)の方ですが、例えば
ブラウザ1でID=1を確認;存在しない
ブラウザ2でID=1を確認;この時点ではブラウザ1で採用されていないので「存在しない」
ブラウザ1でID=1を採用
ブラウザ2でID=1を採用;確認時点では存在していなかった
ということが発生する可能性があります。
ですが、これは データベース接続→トランザクション開始→処理→トランザクション終了→データベース切断 とする必要があり、これをサーバーとブラウザという仕組みでやるのは困難です。
A.説明ありがとうございます、(1)の方法でないとデータベースのみで作成するのは難しいという認識であってますでしょうか?
今後のためにお聞きしておきたいのですが、サーバーとブラウザ間が困難な場合どのような構造になるのでしょうか?
No.1
- 回答日時:
現代におけるウェブアプリにおいて URL 設計の主眼は
* SEO 効果
* 使う人の利便性
の二つです。
であるならば URL は短く簡潔で解りやすい構造にすべきでしょう。
参考)
https://www.google.com/search?q=url+seo
"JavascriptでURLを生成する方法" は、
URL が長くなりがちで利用者が読みづらくなるので、
避けたほうが良いと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL 【投稿情報用データベース posts】は必要ないと思います。 1 2022/06/02 21:25
- JavaScript SQLでデータベースから返ったデータのJSON形式生成について 1 2022/04/06 12:25
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- その他(データベース) Q&Aフォームを作成したいのですが、どう設計してよいか分かりません、アドバイスお願い致します。 1 2023/07/27 19:04
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP Q&Aサイトを作成していてURLの生成方法について迷っているのでアドバイスお願い致します 1 2023/08/10 16:42
- その他(IT・Webサービス) 必要なデータを定形資料に取り込む方法 3 2022/08/26 09:29
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
formで送信したPOSTデータの削...
-
長さ0の文字列を格納できません...
-
納品 vs ご納品 どちらが正し...
-
Zと2とか紛らわしいのがあるか...
-
「スポット受注」はどういう意...
-
納入日と納品日について
-
texに関する初歩的な質問
-
Visial C++におけるプログラミング
-
見積書と発注書を兼用できるの...
-
C#の単体テストでローカル変数...
-
食品担当になり、2ヶ月が経つの...
-
営業職をやってます。先月発注...
-
ホームページ・ビルダーで「e...
-
プログラマーの土日のみのアル...
-
Excel-VBA コンテンツの作成日時
-
スーパーなどで発注をする時に...
-
Windows server 2022 CALとSQL ...
-
SEが仕様書を書けない
-
敬語チェックお願いします!
-
Verilogの参考書のお勧めを教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
長さ0の文字列を格納できません...
-
formで送信したPOSTデータの削...
-
電子納品
-
Q&Aの掲示板を作成していてヤフ...
-
株価予測システムを作成するた...
-
住所から市町村JISコードを検出
-
桁数の長くないユニークな値の取得
-
Access97データベースの最大登...
-
CGI(Perl)を使用してGoogleスプ...
-
統計ソフトを作りたいです。
-
プログラムを依頼したときの相...
-
パソコン 言語について 競馬...
-
複数同時アクセスついて
-
Postgresの高速検索
-
【ASP.NET】DataSetをSqlDataSo...
-
「ByRef引数の型が一致しません...
-
xreaでのブログについて
-
株価の終値を自動入力し、自動...
-
マスタメンテ系の仕事とは?
-
XMLになるとホームページはどう...
おすすめ情報