
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
長さ0の文字列を格納できません...
-
電子納品
-
formで送信したPOSTデータの削...
-
納品 vs ご納品 どちらが正し...
-
値上げに対しての供給責任につ...
-
発注書と見積書の品番が異なっ...
-
三菱製PLC:ファイルレジスタ(...
-
納入日と納品日について
-
texに関する初歩的な質問
-
電子納品 CDへの捺印について
-
営業職をやってます。先月発注...
-
契約期間内における値上げ等に...
-
敬語チェックお願いします!
-
見積だけで契約成立?
-
印刷会社がミスプリント。その...
-
空港の免税店に納品する方法を...
-
Windows server 2022 CALとSQL ...
-
テストについて
-
Excel VBA(マクロ)処理...
-
ACCESSで受注管理を作成中です...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
長さ0の文字列を格納できません...
-
formで送信したPOSTデータの削...
-
電子納品
-
PHP 更新順を作成日順に変更し...
-
【ASP.NET】DataSetをSqlDataSo...
-
Access97データベースの最大登...
-
住所から市町村JISコードを検出
-
javaとaccessについて
-
複数同時アクセスついて
-
CGI(Perl)を使用してGoogleスプ...
-
accessとSQLserverの違い
-
Javaで家計簿を作成
-
株価予測システムを作成するた...
-
Q&Aの掲示板を作成していてヤフ...
-
独学でXMLの有効性を感じながら...
-
ASP 多言語の表示がうまく出来...
-
前方一致プログラムの書き方
-
Access2010 大雑把な利用の流れ
-
エクセル、VBAで検索するとデー...
-
統計ソフトを作りたいです。
おすすめ情報