この mysql データベースを設計する方法
-
20-09-2019 - |
質問
各ユーザーには4つのテーブルがあります。4 つのテーブルのデータは追加されず、固定されたままになります。
各ユーザーテーブルの構造は同じになります。
これらのユーザーのデータを mysql に保存するには、データベースを設計する必要があります。
それぞれ 4 つのテーブルを持つ 200 万のデータベースを作成する必要がありますか?
助けていただければ幸いです
4 つのテーブルは
- ユーザーの1ヶ月間の着信履歴
- ユーザーの 1 か月分の受信 SMS 記録
- ユーザーの1か月分の発信履歴
- ユーザーの 1 か月間の送信 SMS 記録
呼び出しテーブルは次の構造になります。
日付時刻番号期間料金
受信SMSは次の構造になります
日付時刻番号
送信SMSは次の構造になります
日時番号料金
解決
これは私が呼んでいる SQL アンチパターンです メタデータ トリブル。 見た目は可愛くて人懐っこいのですが、すぐに制御不能になって増殖してしまいます。
「... ごとに同一のテーブルがあります」または「... ごとに同一の列があります」で始まるフレーズを聞いたら、おそらくメタデータ トリブルがあるでしょう。
まず、4 つのテーブルを持つ 1 つのデータベースを作成し、 user_id
4 つのテーブルのそれぞれに属性を付けます。
例外的に、ユーザーごとに別々のデータベースに分割したい場合がありますが、それらは 例外. 。自分が何をしているのかを理解し、それが必要であることを証明できない限り、そこには行かないでください。
他のヒント
ほとんどのデータベース サーバー (およびファイル システム) は、それほど多くの個別のデータベースを必要とするインスタンスを処理しません。実際に必要なのは、各ユーザーの行を含む 4 つのテーブルだと思います。それはまったく合理的な要件です。
いいえ、それぞれ 4 つのテーブルを持つ 200 万のデータベースは必要ありません。必要なのは、1 つのデータベース、4 つのテーブル、およびユーザーごとに一意のユーザー ID だけです。
何かのようなもの:
users table:
| user_id (primary key) | username |
address table
| user_id (foreign key) | address |
whatever table
| user_id (foreign key) | whatever |
なぜユーザーごとに 4 つのテーブルが必要なのか不思議に思います。ここで私が伝えようとしていることの基本を理解していただければ幸いです。
必要なのは、ユーザー用のテーブル、table1、table2、table3、table4 だけです。table1 にデータを入力する必要がある場合は、table1 に users_id を含めるだけです
TABLE 1 USERS
ID usersID amount quantity ID Name
1 1 200 2 1 John
2 1 400 3
その後、Table1.usersid = users.id all tableで内側結合を使用して接続できます。
要点を理解していただければ幸いです
いいえ、200 万のデータベースは必要ありません。
実際には、4 つのテーブルに対して 200 万のインスタンスが必要です。
もちろん、各テーブルが他のテーブルのリレーショナル属性を持つようにリレーショナル データベースを設計する必要があります。