自分のスキル (PHP、HTML、CSS、JavaScript など) を練習するためのソーシャル ネットワークを作成しているだけです。データベースのレイアウトを設計しているときに、残念ながら解決できない質問が表示されます。
UserMainというテーブルがあります。
+------------+---------------------+
| Field | Type |
+------------+---------------------+
| u_id | bigint(20) unsigned |
| u_email | varchar(256) |
| u_password | varchar(30) |
| u_data | varchar(25) |
| u_friends | varchar(28) |
+------------+---------------------+
登録時に入力する一般的なデータを格納するため。
ユーザーのデータ (名、姓、性別、誕生日など) をdataと呼ばれる別のテーブルに分割し、もちろんfriendsと呼ばれるテーブル内のユーザー間の関係を分離したいと考えました。そこで、上記の u_id を使用して php を介して、すべてのユーザーのデータおよびフレンド テーブルを作成することにし、[u_id]_dataのようなものを思いつきました。
+------------+---------------------+
| Field | Type |
+------------+---------------------+
| u_prename | varchar(20) |
| u_surname | varchar(20) |
| u_sex | boolean |
| u_birthday | DATE |
| u_avatar | varchar(28) |
+------------+---------------------+
問題は明らかに [u_id]_data テーブルから始まるため、今は friends テーブルに値を付けたくありません。ユーザーは姓名などを 1 つだけ持っているため、1 行テーブルです。今質問:
主キーに関連してテーブルの入力を処理するにはどうすればよいですか?
私にとって、新しい「id int not null auto_increment pk」を作成することは、単一の行には必要ないように思われるため、主キーに使用する列の組み合わせがわかりません。
この設計のより良い実装を知っているかもしれませんが、次の点を考慮してください。
あなたがどんな新しい実装を持っているかは問題ではありません。私が持ちたくない唯一のものはdata
、すべてのユーザーのデータを持っていると呼ばれるテーブルです。
わかりました、私は MySQL について悪い意見を持っているか、あまり情報がありませんが、複数のデータ テーブルを持つという私の考えは、パフォーマンス上の理由から来ています。
データを変更または挿入するときの私の考え:
- GetTheUsersId (User-Table で ID を検索しています。10,000,000 ユーザーとしましょう)
- [u_id] があれば、データ テーブルを使用して探しているものを見つけることができます。
(再び) 10,000,000 行で構成されるテーブルでは、時間がかかります。抽象化と次元を遠く離れたレベルにまで引き上げているので、笑わないでください。パフォーマンスを節約するという考えをサポートするためだけです。