質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

1回答

694閲覧

PRIMARY KEY をidにするか emailにするか迷っています。

1981225

総合スコア67

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

1グッド

0クリップ

投稿2023/10/20 18:17

実現したいこと

 全国版情報誌を作成中です。その会員登録で
PRIMARY KEY をidにするか emailにするか迷っています。

CREATE TABLE members (
id int(11) NOT NULL AUTO_INCREMENT,
email varchar(255) NOT NULL,
password varchar(100) NOT NULL,
picture varchar(255) NOT NULL,
created datetime NOT NULL,
modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id, email)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

以上ですがPRIMARY KEY (id, email)とするともし1000万ユーザーが存在するのなら
冗長性的な問題が発生するリスクが高くなるそうです。
それで
emailとidのどちらにPRIMARY KEYを選んだ方がいいでしょうか?
よろしくお願いします。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

neko_the_shadow👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2023/10/21 04:27

> PRIMARY KEY (id, email)とすると どのような意図でそのような設定にしようと考えたのでしょうか?
1981225

2023/10/21 20:47

以下GPT-3.5のやり取りの抜粋です。 全国密着型情報誌を制作中ですが。 冒頭にあげたMySQLのログイン構造に対してアドバイスを頂けないでしょうか? ChatGPT 全国密着型情報誌を制作する際、MySQLのログイン構造に関するアドバイスを提供できます。以下はいくつかの考慮すべきポイントです: パスワードのセキュリティ: パスワードは安全に保管されるべきです。パスワードを平文で保存するのではなく、ハッシュ関数を使用してパスワードをハッシュ化し、安全な方法で保存しましょう。また、パスワードの強度ポリシーを実装して、ユーザーが強力なパスワードを設定するように促すことが重要です。 セキュリティ対策: SQLインジェクションやクロスサイトスクリプティング(XSS)などのセキュリティ脆弱性からデータベースを保護するために、入力検証とエスケープ処理を適切に行い、プリペアドステートメントやクエリパラメータ化を使用することが重要です。 ユーザー認証と権限管理: ユーザー認証を実装し、適切な権限管理を行ってください。ユーザーごとに適切なデータベースアクセス権を与え、最小限の特権の原則に従ってセキュリティを向上させましょう。 バックアップと復元: データのバックアップと復元戦略を策定し、定期的にバックアップを作成してデータ損失から保護しましょう。 パフォーマンスの最適化: インデックスを適切に設定し、クエリのパフォーマンスを最適化するために必要なクエリチューニングを実施しましょう。また、適切なキャッシング戦略を導入してデータベースの負荷を軽減できます。 データの整合性: データベース内のデータの整合性を維持するために、外部キー制約やトランザクション処理を使用しましょう。 データ保護と規制遵守: 個人情報や機密データを適切に保護し、データ保護法規制(GDPRなど)に準拠しましょう。 モバイル対応とAPI設計: ウェブアプリケーションがモバイルデバイスに対応し、外部からのアクセスに対する適切なAPI設計を行いましょう。 モニタリングとロギング: データベースのパフォーマンスとセキュリティを監視し、異常なアクティビティをロギングして、セキュリティインシデントの早期発見と対応を行いましょう。 アップグレードとメンテナンス: データベースエンジンやアプリケーションのアップグレードと定期的なメンテナンスを実施して、システムの安定性を保ちましょう。 これらの要点を考慮しながら、MySQLデータベースの設計と運用を行うことで、安全性、信頼性、パフォーマンスを確保できます。セキュリティとデータの完全性を特に重要視し、最新のベストプラクティスに従って設計と運用を行ってください。 User ありがとうございます。  何か追加する項目削除する項目があればアドバイスを頂けないでしょうか? ChatGPT MySQLデータベースの設計に関して、追加または削除すべき項目についてのアドバイスを提供します。設計はプロジェクトの具体的な要件に依存するため、以下は一般的なガイダンスです。具体的な要件に合わせて調整が必要です。 追加する可能性がある項目: ユーザーグループ/ロール: もし異なるユーザーグループ(例: 管理者、編集者、読者など)が異なる権限を持つ場合、それに関連する情報を格納するためのテーブルを追加で考慮してください。 カテゴリ情報: 情報誌が異なるカテゴリに分かれている場合、それに関連する情報を格納するためのテーブルを追加することを検討できます。 広告情報: 収益を上げるために広告を掲載する場合、広告情報を格納するテーブルを検討することができます。 コメント/評価: 記事に対するコメントや評価情報を格納するテーブルを追加することで、読者との対話を可能にできます。 イベント情報: イベント情報を提供する場合、それに関連するテーブルを追加できます。 削除する可能性がある項目: 不要な情報: プロジェクトの要件に合わない、または不要な情報を削除しましょう。例えば、テーブル内の特定の列が不要であれば、それを削除できます。 過去のログ情報: 過去のログ情報を維持する必要がない場合、ログ情報を削除またはアーカイブすることを検討してデータベースサイズを管理しましょう。 不要なインデックス: クエリパフォーマンスに影響を与えない不要なインデックスを削除し、パフォーマンスを最適化しましょう。 古いアカウント: ユーザーアカウントの整理を行い、長らくアクティブでないアカウントを削除することを検討します。 古いデータ: 過去のデータが必要でない場合、古いデータを削除またはアーカイブすることでデータベースサイズを削減できます。 これらの追加と削除のポイントは、プロジェクトの要件や変更に応じて調整するべきです。データベースの設計は柔軟で、最初の設計から進化させることができます。定期的な要件の評価とデータベースの最適化を行い、プロジェクトの成功に貢献できます。 User ありがとうございます。 CREATE TABLE `members` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `password` varchar(100) NOT NULL, `picture` varchar(255) NOT NULL, `created` datetime NOT NULL, `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; 以上に対して  何か追加する項目削除する項目があればアドバイスを頂けないでしょうか? ChatGPT 与えられた"members"テーブルの設計に関して、以下の追加と削除のポイントを検討できます。 追加する可能性がある項目: プロフィール情報: ユーザーの詳細なプロフィール情報(例: 生年月日、性別、住所など)を格納するための列を追加できます。 ソーシャルメディアリンク: ユーザーのソーシャルメディアプロフィールへのリンクを格納するための列を追加できます。 ステータスまたはバイオ: ユーザーが自己紹介やステータスメッセージを入力できるような列を追加できます。 プライバシー設定: ユーザーがプライバシー設定を管理できるような列を追加し、情報の公開/非公開などを制御できます。 削除する可能性がある項目: ENGINE=MyISAM: MyISAMストレージエンジンはInnoDBよりもトランザクションサポートが制限的であり、データの整合性や耐久性に欠けることがあります。InnoDBを検討することをお勧めします。 AUTO_INCREMENT=3: AUTO_INCREMENTの初期値を明示的に設定する必要がある理由がない場合、デフォルトの0を使用することが一般的です。初期値を変更することを検討します。 MyISAMテーブル自体: MyISAMテーブルはInnoDBに比べてトランザクションサポートが限られており、データの整合性に関するリスクがあるため、InnoDBを検討することがおすすめです。 modified列: この列は"modified"という名前のタイムスタンプ列で、行が更新されるたびに自動的に更新されます。更新日時を必要としない場合、または別の方法で管理できる場合、不要な場合があります。 上記のアドバイスは、プロジェクトの具体的な要件に依存します。必要な情報と要件に基づいてテーブル設計を最適化することが大切です。データベース設計は柔軟で変更可能であるため、プロジェクトの進行に合わせて調整できます。 User CREATE TABLE `members` ( `id` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(255) NOT NULL, `password` varchar(100) NOT NULL, `picture` varchar(255) NOT NULL, `created` datetime NOT NULL, `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`, `email`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; 以上ですが、 最初はidとemailに両方にPRIMARY KEYを設定しておいて、会員数が増えすぎてデータの冗長性が発生 が発生し始めた場合emailだけPRIMARY KEYの設定にすることは簡単にできますか? ChatGPT MySQLでは、PRIMARY KEYの変更は一般的に制約が難しい操作です。PRIMARY KEYが変更される場合、既存のデータベース内のデータの再構築が必要となり、データの一時的な喪失やパフォーマンスへの影響が生じる可能性があります。 既存のテーブルでPRIMARY KEYを変更する場合、一般的なステップは次のようになります: 既存のテーブルのバックアップを取ります。これはデータを保護するために非常に重要です。 新しいテーブルを作成し、新しいPRIMARY KEY制約を設定します。この場合、emailカラムがPRIMARY KEYになります。 既存のデータを新しいテーブルに移行します。INSERT文を使用してデータをコピーできます。 データが正しくコピーされたことを確認したら、古いテーブルを削除します。 必要に応じて、新しいテーブルにインデックスを再作成し、データベースのパフォーマンスを最適化します。 注意事項: PRIMARY KEYの変更にはデータのコピーが必要ですので、データ量が多い場合には時間がかかる可能性があります。 データベースの運用中に変更を行う場合、データベースへのアクセスを一時停止するか、変更中に新しいデータが追加されないようにしなければなりません。 そのため、初めからemailカラムがPRIMARY KEYとして設定されていることがベストプラクティスです。データベース設計時に検討しておくことが、将来の変更作業を回避するために重要です。PRIMARY KEYはデータの一意性を保証するために使用されるため、慎重に設計する必要があります。 User ありがとうございます。 以下の内容は嘘でしょうか? はい、簡単に変更できます。 idとemailの両方にPRIMARY KEYを設定している場合、以下のCREATE TABLE文を使用して、emailだけPRIMARY KEYに設定することができます。 SQL ALTER TABLE `members` DROP PRIMARY KEY, ADD PRIMARY KEY (`email`); コードは慎重に使用してください。詳細 このCREATE TABLE文を実行すると、idカラムのPRIMARY KEY制約が削除され、emailカラムのPRIMARY KEY制約が追加されます。 ただし、この方法で変更した場合、idカラムの値は重複した値が存在しなくなるため、idカラムの値を参照している他のテーブルやアプリケーションに影響を与える可能性があります。 影響を与えないようにするには、idカラムの値をユニークな値に変更してから、emailだけPRIMARY KEYに設定するようにしてください。 具体的には、以下のCREATE TABLE文を使用して、idカラムの値をユニークな値に変更することができます。 SQL ALTER TABLE `members` ADD UNIQUE INDEX `id_unique` (`id`); コードは慎重に使用してください。詳細 このCREATE TABLE文を実行すると、idカラムにユニーク制約が追加されます。 idカラムの値をユニークな値に変更した後、emailだけPRIMARY KEYに設定することで、データの冗長性とデータベースのサイズ増加を防ぐことができます。 ChatGPT 提供された情報は正確で、一般的にはMySQLでPRIMARY KEYを変更する方法を示しています。具体的には、ALTER TABLEステートメントを使用してmembersテーブルから現在のPRIMARY KEY制約(id列)を削除し、email列に新しいPRIMARY KEY制約を追加しています。 ただし、この変更には注意が必要で、特にデータの整合性に影響を与える可能性がある点に留意する必要があります。以下の考慮事項があります: 既存のデータ: 既存のデータのid列には重複する値がある可能性があります。この変更により、一意性制約がemailに移されるため、id列の重複値を解消する必要があります。データの整合性を保つために、重複するidの値を変更するか、データをクリーンアップする必要があります。 他のテーブルへの影響: 既存のデータベース内でmembersテーブルのid列を参照している他のテーブルがある場合、この変更が影響を及ぼす可能性があります。他のテーブルとの依存関係を調査し、変更がどのように影響するかを確認する必要があります。 データベースのバックアップ: 重要な変更を加える前に、データベースのバックアップを取り、変更に失敗した場合にデータを復元できるようにしておくことが重要です。 この変更は慎重に行う必要があり、データベース内の他のテーブルとの連携やデータ整合性に関して、詳細なテストと計画が必要です。また、変更を実行する前にデータベースの利用停止を検討し、ユーザーに通知することも検討すべきです。 User ありがとうございます。 そうですか、それなら、変更するとあんまり良くない感じですねにもし 1000万PVとなるとかなりのデータの整合性がなくなる感があります。  それでは もしGPTさんなら、1000万PVユーザが存在するのなら emailとidのどちらにPRIMARY KEYを選びますか? ChatGPT 1000万PVの規模を持つウェブアプリケーションで、データベースの設計を行う場合、PRIMARY KEYを選ぶ際にはいくつかの要因を考慮する必要があります。emailとidのどちらをPRIMARY KEYに選ぶかについてのアドバイスは以下のようになります: EmailをPRIMARY KEYに選ぶ場合: 一意性: ユーザーのメールアドレスは一意であるため、データベース内のデータが重複しないことを保証します。 データ整合性: ユーザーが自分のメールアドレスを変更することが難しい場合、データの整合性を維持しやすくなります。 簡単な検索: ユーザー情報をメールアドレスを使用して効率的に検索できます。 ただし、emailがPRIMARY KEYの場合、メールアドレスの変更に対する制約があり、パフォーマンスの観点から考慮する必要があります。 IDをPRIMARY KEYに選ぶ場合: データ整合性: ユーザーがメールアドレスを変更できる場合でも、IDをPRIMARY KEYとして使用することでデータの整合性を簡単に維持できます。 パフォーマンス: IDを主キーとして使用する場合、データベースのクエリのパフォーマンスが向上する可能性があります。IDは整数型であるため、比較やインデックス付けが高速です。 IDをPRIMARY KEYに選ぶ場合、データベース内のデータには重複が発生する可能性があるため、データの一意性に注意する必要があります。この問題は、ID列にユニークなインデックスを設定して対処できます。 最終的な選択はプロジェクトの要件、データモデル、および将来の拡張性に基づいて行われるべきです。通常、ユーザーにメールアドレスの変更を許可する場合でも、データ整合性を保持し、メールアドレスの重複を許さない方法を採用することができます。この場合、IDをPRIMARY KEYにし、メールアドレスにユニークなインデックスを設定するアプローチが一般的です。また、データベースのパフォーマンスやインデックス設計も重要です。 User ありがとうございます。そうですか ユーザが使いやすいサイトを目指しています。 データ検索など処理速度を優先にするのであれば idとemailにPRIMARY KEYをつけるとしたらどちらがいいでしょうか? ChatGPT ユーザーが使いやすいサイトを提供するために処理速度を優先する場合、以下の要点を考慮して、idかemailのどちらをPRIMARY KEYに設定するかを決定できます: idをPRIMARY KEYに設定する場合: idは整数型であるため、比較やインデックスが高速に動作し、検索パフォーマンスが向上します。 データベース内でユーザーを一意に識別するため、データの整合性を容易に維持できます。 ユーザーがメールアドレスを変更できる場合でも、idを使用してユーザーを一意に特定できます。 emailをPRIMARY KEYに設定する場合: emailは自然な識別子であり、ユーザーが自分のメールアドレスを使用してアクセスすることが直感的で使いやすいです。 メールアドレスをPRIMARY KEYとして使用することで、検索時にメールアドレスを直接使用できるため、速い検索が可能です。 一般的に、ユーザーがメールアドレスを使ってアクセスするウェブサイトの場合、emailをPRIMARY KEYに設定することがアクセス速度と使いやすさを向上させます。メールアドレスを使ってユーザーを特定し、迅速にアクセスすることができるためです。 ただし、データベース内のデータが重複しないように注意する必要があります。ユニークな制約をemail列に適用することで、メールアドレスの重複を防ぎ、データの整合性を維持できます。 したがって、ユーザーが使いやすいサイトを目指し、速いデータ検索を優先する場合、emailをPRIMARY KEYに設定することが一般的なアプローチです。 User ありがとうございます。 ご回答内容で質問します。  idをPRIMARY KEYに設定する場合: idは整数型であるため、比較やインデックスが高速に動作し、検索パフォーマンスが向上します。 との回答に対して、 最後の回答ですが  ユーザーが使いやすいサイトを目指し、速いデータ検索を優先する場合、emailをPRIMARY KEYに設定することが一般的なアプローチです。  以上ですが 回答内容に矛盾が生じていないでしょうか? ChatGPT 申し訳ありません、前後の回答内容に矛盾が生じていました。正確な情報を提供いたします。 ユーザーが使いやすいサイトを目指し、速いデータ検索を優先する場合、以下のポイントを考慮して、PRIMARY KEYを選択する必要があります: idをPRIMARY KEYに設定する場合: idは整数型であるため、比較やインデックスが高速に動作し、検索パフォーマンスが向上します。 データベース内でユーザーを一意に識別するため、データの整合性を容易に維持できます。 ユーザーがメールアドレスを変更できる場合でも、idを使用してユーザーを一意に特定できます。 emailをPRIMARY KEYに設定する場合: emailは自然な識別子であり、ユーザーが自分のメールアドレスを使用してアクセスすることが直感的で使いやすいです。 メールアドレスをPRIMARY KEYとして使用することで、検索時にメールアドレスを直接使用できるため、速い検索が可能です。 どちらのアプローチも一長一短があり、プロジェクトの要件や利用状況に合わせて選択する必要があります。データベース設計はバランスを取る必要があり、ユーザビリティとパフォーマンスの両方を考慮することが重要です。質問に対する回答は、特定の要件と優先事項に依存するため、適切な選択はプロジェクトの状況によります。 User 以上の回答ですが idをPRIMARY KEYに設定する場合: とemailをPRIMARY KEYに設定する場合: と比較したら どちらが検索時間が早くなりますか? ChatGPT 申し訳ありません、誤解が生じていました。比較的早い検索パフォーマンスを得るためには、idをPRIMARY KEYとして設定する方が一般的に速いと考えられます。 idが整数型であるため、インデックスの効率的な検索が可能で、検索クエリが高速に実行されます。一方で、emailは文字列型であり、比較や検索に関して整数型よりも効率が低いため、検索パフォーマンスが劣る可能性があります。 したがって、速いデータ検索を優先する場合、通常はidをPRIMARY KEYとして設定することが適しています。整数型のidを使用することで、データベース内のデータを迅速に特定し、効率的に検索できます。 再度、混乱を招いた回答に対し、お詫び申し上げます。正確な情報を提供できるように修正しました。 User ありがとうございます。 idをPRIMARY KEYに設定しておいて、必要に応じて後で emailに追加でPRIMARY KEYを設定することは可能でしょうか? ChatGPT idをPRIMARY KEYに設定した後、後でemailに追加でPRIMARY KEYを設定することは理論的には可能です。ただし、データベーステーブルのPRIMARY KEYを変更することは、データベースの構造に影響を与え、慎重に行う必要があります。 PRIMARY KEYを変更する場合、通常は以下のステップに従うことになります: テーブルのバックアップ: 重要なデータを保護するため、変更前にテーブルのバックアップを取ります。 テーブルの変更: ALTER TABLEステートメントを使用して、PRIMARY KEYを変更します。例えば、id列をPRIMARY KEYから外し、email列にPRIMARY KEYを設定します。 データの整合性: PRIMARY KEYの変更により、データの整合性に問題が発生する可能性があるため、データを適切に調整する必要があります。email列に重複する値がないことを確認します。 テスト: PRIMARY KEYの変更後、データベースをテストし、正しく動作することを確認します。 アプリケーションの修正: PRIMARY KEYの変更がアプリケーションコードに影響を与える場合、必要に応じてアプリケーションコードを修正します。 変更が慎重に行われないと、データの整合性の問題やアプリケーションの動作に影響を及ぼす可能性があるため、データベースの変更には注意が必要です。必要に応じてデータベース管理者や開発者の協力を得て、変更を計画し、実施することが重要です。 User PRIMARY KEY は通常であれ1個あるんが普通ですが2個PRIMARY KEYを 設定する場合のメリットは何ですか? ChatGPT 通常、テーブルには1つのPRIMARY KEYがあります。PRIMARY KEYはそのテーブル内で一意の値を識別するために使用され、データの一意性を
1981225

2023/10/21 21:00

Bard との会話 プロフィール写真 ユーザー認証の項目でに 1)ユーザ名 2)メールアドレス 3)パスワード 以上が一般的なログイン方法だと思います。 それで、primary key を指定する場合以上の項目どれに 指定すればいいでしょうか?  全国版の情報サイトを作成中です。1000万登録数を目指しています。 後ではソーシャルログインも追加する予定です。 よろしくお願いします。 プライマリーキーは、各レコードを一意に識別するための値です。したがって、ユーザー認証の項目の中で、重複が許されない値をプライマリーキーに指定する必要があります。 上記の3つの項目のうち、重複が許されないのは「メールアドレス」です。ユーザ名やパスワードは、ユーザーが任意で設定できるため、重複する可能性があります。 そのため、1000万登録数を目指す情報サイトでは、プライマリーキーを「メールアドレス」に指定することをおすすめします。 また、ソーシャルログインも追加する予定とのことですので、ソーシャルログインで使用されるIDをプライマリーキーに指定することも検討できます。ソーシャルログインでは、ユーザー名やメールアドレスが重複する可能性は低いため、プライマリーキーとして使用しても問題ありません。 ただし、ソーシャルログインで使用されるIDは、外部サービスから提供されるため、データベースの設計や運用に影響を与える可能性があります。そのため、ソーシャルログインを追加する前に、慎重に検討する必要があります。 具体的なプライマリーキーの指定方法は、使用しているデータベースの種類やシステムによって異なります。以下に、MySQLでの指定方法を例として示します。 SQL CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, email VARCHAR(255) NOT NULL UNIQUE, username VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL ); コードは慎重に使用してください。詳細 この例では、id 列を自動採番列として定義し、email 列をプライマリーキーとして指定しています。また、email 列には、UNIQUE 制約を指定することで、重複を防止しています。 以上、ご参考になれば幸いです。 ソース github.com/mangadi3859/url-shortenerライセンス(MIT)が必要 github.com/avivaitzack/improvment- プロフィール写真 ありがとうございます。 メールアドレスをprimary key了解です。  さてソーシャルログインは後で簡単に追加できますか? はい、ソーシャルログインは後から簡単に追加できます。 ソーシャルログインは、外部サービスから提供されるAPIを利用することで実装できます。そのため、既存のシステムに影響を与えることなく、簡単に追加することができます。 具体的な追加方法は、使用するソーシャルログインサービスによって異なります。ただし、一般的には、以下の手順で追加できます。 ソーシャルログインサービスのアカウントを作成します。 ソーシャルログインサービスのAPIを取得します。 既存のシステムにAPIを組み込みます。 ソーシャルログインサービスのアカウント作成やAPI取得は、通常、Webサイト上で簡単に行うことができます。APIを組み込む方法は、使用しているプログラミング言語やフレームワークによって異なります。 以下に、ソーシャルログインサービスの一覧を示します。 Google Facebook Twitter LINE Yahoo! JAPAN 楽天 これらのサービスは、いずれもAPIを提供しており、比較的簡単にソーシャルログインを追加することができます。 なお、ソーシャルログインは、ユーザーのIDとパスワードを外部サービスに保存するため、セキュリティ対策が必要です。そのため、ソーシャルログインを追加する際には、セキュリティ対策についても検討する必要があります。 以上、ご参考になれば幸いです。 プロフィール写真 ありがとうございました。 大変助かります。 ご丁寧にありがとうございます。 情報サイトの開発が順調に進むことを願っています。 何かご不明な点がございましたら、お気軽にご質問ください。 プロフィール写真 ありがとうございます。  冒頭で少し触れまし方、「地域(秘密です。)フ」と題して 全国密着型情報誌を制作中です。 それで、Mysqlにテーブルのカラム項目を検討中です。 カラム名は英語ですが、入会日と変更日は自動入力される構造とします。 したがって1)~4)までユーザが入力する様な設計する予定です。 なにかアドバイスを頂けないでしょうか?  1)ニックネーム 2)メールアドレス 3)パスワード 4)写真のパス 5)入会日 6)変更日  以上を検討中です。 はい、アドバイスさせていただきます。 まず、1)~4)までユーザが入力する様な設計とのことですが、以下のような項目も追加を検討してみてはいかがでしょうか。 性別 年齢 居住地 興味 これらの項目は、ユーザーの属性や興味を把握するために役立ちます。例えば、性別や年齢を把握することで、ターゲットユーザーに合わせたコンテンツを配信することができます。また、興味を把握することで、ユーザーのニーズに合った情報を提供することができます。 また、5)~6)の入会日と変更日は、自動入力するのではなく、ユーザが手動で入力できるようにしておくことも検討してみてはいかがでしょうか。 入会日は、ユーザーがいつサイトに登録したかを把握するために役立ちます。また、変更日は、ユーザーがいつ情報を更新したかを把握するために役立ちます。 以下に、これらの項目を追加したテーブルの設計例を示します。 SQL CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nickname VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, gender VARCHAR(255) NOT NULL, age INT NOT NULL, address VARCHAR(255) NOT NULL, interests VARCHAR(255) NOT NULL, photo_path VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL ); コードは慎重に使用してください。詳細 もちろん、これらの項目は、情報サイトの用途や目的によって追加するかどうかを検討する必要があります。 以下に、追加するかどうかを検討する際のポイントをいくつか示します。 ユーザーの属性や興味を把握するために必要な項目か? 自動入力するのではなく、ユーザが手動で入力する必要がある項目か? データベースのパフォーマンスに影響を与えないか? これらのポイントを検討して、最適なテーブルの設計を行ってください。 情報サイトの開発が順調に進むことを願っています。 ソース github.com/Denverss/doingg プロフィール写真 ありがとうございます。大変参考になります。 ユーザー入力の手入力見直して検討します。  さて質問ですが 認証にidを追加を検討しています。 これは、オートインクリメントしてくれる設定です。 主キー設定した場合、なにかメリットはありますか? 他の回答案を表示 はい、主キーを設定した場合、以下のメリットがあります。 レコードを一意に識別することができる テーブルの整合性を保証することができる データベースのパフォーマンスを向上させることができる レコードを一意に識別することができる 主キーは、テーブル内の各レコードを一意に識別するための値です。そのため、主キーを設定することで、レコードを簡単に特定することができます。 例えば、メールアドレスを主キーとして設定した場合、あるユーザーの情報を検索する際に、メールアドレスを入力するだけで、そのユーザーのレコードを特定することができます。 テーブルの整合性を保証することができる 主キーを設定することで、テーブルの整合性を保証することができます。整合性とは、データの正確性や矛盾のなさを表すものです。 例えば、メールアドレスを主キーとして設定した場合、あるユーザーのメールアドレスを変更した場合、その変更は、テーブル内のすべてのレコードに反映されます。そのため、メールアドレスが重複するなどの整合性の問題が発生することはありません。 データベースのパフォーマンスを向上させることができる 主キーを設定することで、データベースのパフォーマンスを向上させることができます。 例えば、メールアドレスを主キーとして設定した場合、メールアドレスを検索する際に、インデックスを使用して検索を行うことができます。インデックスとは、データベース内のデータを効率的に検索するための仕組みです。 そのため、メールアドレスを主キーとして設定することで、メールアドレスの検索を高速化することができます。 以上が、主キーを設定した場合のメリットです。 ご質問の内容から、すでにメールアドレスを主キーとして設定されているようですね。 また、オートインクリメントは、主キーに指定した列の値を自動的にインクリメントする機能です。 オートインクリメントを設定することで、手動でIDを入力する必要がなくなります。また、IDが連番で生成されるため、レコードの並び替えや検索が容易になります。 オートインクリメントを設定することで、主キーのメリットをより効果的に活用することができます。 情報サイトの開発が順調に進むことを願っています。
1981225

2023/10/21 21:02

ご視聴ありがとうございます。 人間様にも確認を取らないといけないと思い投稿しました。 よろしくお願いします。
1981225

2023/10/21 21:16

PRAIMARY KEYは主キーですので、1個のテーブルには1個しか指定出来ません、なので、idとmailの両者にPRIMARY KEYの設定は出来ません。インデックスは幾つでも設定出来るので、mailにインデックスを設定する事は当然出来ます。 以上は正解でしょうか?
1981225

2023/10/21 21:43

住民票を1テーブルが日本国とした場合 住民票が PRAIMARY KEY だとしたら 1テーブにPRAIMARY KEYは1個しか選択出来ない当然ですよね! Mysqlだけの問題ではなくてその他のデータベースシステムをそうならないと 矛盾が生じるからですね!?  以下がGPT-3.5の回答です。 ありがとうございます。 そうなんですね!? いまはマイナバーカードで住民票が2個存在することはコンピュータ上で すぐにバレると思いますが昔はコンピュータが無かった時代は2個存在しうることは 可能ですよね!?  日本国において住民票が2個存在した そんなのって事例があるのですか? ChatGPT 住民票が2つ存在する状況は非常に稀であり、通常はシステム上で確認されるようなことではありません。住民票は個人の住所や戸籍情報などを記録した公的な文書で、一つの人物が複数の住民票を持つことは法的には認められていません。 日本においても、住民票は住所地によって管轄の役所で管理されており、住民票の重複は通常防がれています。また、住民票情報はデジタル化されており、異なる地域の役所間で情報の共有が行われているため、同じ人物が別の地域で住民票を持つことは難しいはずです。 ただし、過去には住民票の誤登録やシステムの誤動作により、同じ人物に対して複数の住民票が存在したという事例は一部で報告されています。しかし、このようなケースは異常事態であり、通常の運用では発生しません。 住民票の管理は法的な要件とプライバシー保護の観点から慎重に行われており、個人情報の正確性とセキュリティが確保されるようになっています。したがって、通常の状況では同じ人物による住民票の重複は許容されません。
1981225

2023/10/21 21:51

実際は転勤などで住所変更する場合は住民票がA市~B市に移す場合必ず 役所同士でやり取りをしてから、移す作業を行っています。 システム上は住民票が2個存在することはありませんが、中には 役所のミスによる「ダブルブッキング」みたいなことはあると思います。
1981225

2023/10/21 22:48

ありがとうございます。 下手に個人的に認証システムを構築して、そのメールアドレスなど 個人情報を維持管理する手間暇を省くためにリスクを少しでも避けたいところです。  ソーシャル認証 が適していると思います。 そう思われないでしょうか?
maisumakun

2023/10/21 22:51

> PRAIMARY KEYは主キーですので、1個のテーブルには1個しか指定出来ません 複合プライマリキーという設定も可能ですが、それを意図したものではなかったということですね。了解しました。
guest

回答1

0

idはAUTO_INCREMENTですので、emailに関係なく一意になるので、idだけPRIMARY KEYでいいと思います。
emailは変わる可能性があるので、PRIMARY KEYにはしないほうがいいと思います。

投稿2023/10/20 20:40

crowmt

総合スコア402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問