0

アート ギャラリー プロジェクトがあります。

1 時間ごとにグループがギャラリーを訪れ24 hours = 24 groupsます。

25、28、30、40 など、24 を超えるグループが訪問することもあります。
各グループには、システムによって生成された一意の ID を持つ 50 から 60 または 70 人の訪問者がいます。
訪問した時間に応じてすべてのグループ ID を挿入できるデータベースを設計する必要があります。
例:

1 hour = 1, 34, 3, 6, 67, 53, 57, ... up to 60 or 70 total IDs
2 hours = 2, 35, 4, 7, 68, 54, 58 ... up to 60 or 70 total IDs
...and so on. 

ある日と次の日、同じプロセスが他の一意の ID で繰り返されます。

時間のテーブルを作成するNULLと、他の時間の値があり、無駄なスペースができます!
異なる時間に異なるテーブルを作成した場合、時間テーブルの数よりも多くの時間があった場合はどうなりますか?

完璧なテーブルを設計する方法や、値のない値を挿入する他の方法を誰かが提案できNULLますか?

MySQLでPHPを使用しています。

4

2 に答える 2

3

ビジネス上の問題をモデル化するには、データベースを作成する必要があります。

訪問者ごとにテーブルを作成します。このテーブルには、UniqueId を呼び出す主キーがあります。

グループごとにテーブルを作成します。グループごとに 1 つの行があります。「グループ」は SQL の予約語であるため、「グループ」ではなく、TourGroup のように呼びます。このテーブルには、TourGroupId とグループに関する情報が含まれます。あなたが説明したことから、各グループは一度だけ訪問するので、訪問の時間はこの表になります.

訪問者をグループに割り当てるテーブルを作成します。これを VisitGroup のように呼び出します。これには、TourGroupId と UniqueId という 2 つの重要な列があります。

このプロセスは正規化と呼ばれます。一般に、データベースを使用する場合は、現実世界の状況を模倣したデータ構造が最適です。

もう一つアドバイス。すべてのテーブルで、id を主キーにし、テーブルの最初の列にします。自動インクリメントする必要があります。また、テーブルの最後に CreatedBy と CreatedAt の 2 つの列を含めます。これらには、誰がいつ各行を作成したかのデフォルト値が必要です。これはデータベース内で少し余分なスペースを占有しますが、将来的に問題を解決するのに非常に役立ちます。

于 2012-07-21T22:49:00.107 に答える
0

あなたは通常、次の間の 1:Nエンティティ関係の前にいます。

  • 訪問時間
  • 毎時間複数の訪問者がギャラリーを訪れた可能性があるため、一意の ID。

この問題は、2 列のテーブルを使用することで解決されます

  • 訪問時間 (たとえば、時間と日付を DATETIME 列に格納)
  • 一意の ID (一意の ID の形成方法に応じて、UNSIGNED INT またはその他のデータ型として、訪問者の一意の ID を保存します)。

次に、適切に作成された SQL クエリを使用して、ユーザーの希望どおりにデータを表示する必要があります。たとえば、 SELECT `unique id` FROM `yourtable` WHERE `visit time` = '2012-07-22 15'今日の 15 時間の一意の ID のリストを表示できます。

于 2012-07-21T22:50:26.953 に答える