私はPHP(Codeigniter/MySQL)を使用してアプリケーションを作成しており、アプリケーション内には組織があります。組織の複数の場所のデータベース構造
各組織は、(私はこれらの領域を呼んでいる)、複数の場所、地域、部署などを持つことができ
各エリアには、管理者があり、時々私は、より高い領域に物事をエスカレートする必要があります。
私は現在、1つのテーブル内のすべてのデータを持っている、と私はparent_area_idを使用し、親を決定するためにarea_levelています、子供など
しかし、私は、これは非常に非効率的であると思うし、私が指摘してきました閉鎖ループに向かって、私はそれについて知りません。
ここでデータベーステーブルは、このokです。これは効率的であるか、より良い方法ですか?
+----------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+----------------+
| area_id | int(12) | NO | PRI | NULL | auto_increment |
| area_title | varchar(40) | NO | | NULL | |
| area_name | varchar(40) | NO | | NULL | |
| address1 | varchar(40) | YES | | NULL | |
| address2 | varchar(40) | YES | | NULL | |
| address3 | varchar(40) | YES | | NULL | |
| town | varchar(20) | YES | | NULL | |
| county | varchar(20) | YES | | NULL | |
| post_code | varchar(10) | YES | | NULL | |
| has_ra | varchar(1) | YES | | 0 | |
| org_id | int(12) | NO | MUL | NULL | |
| parent_area_id | int(8) | YES | | NULL | |
| area_level | int(1) | YES | | NULL | |
+----------------+-------------+------+-----+---------+----------------+
EDIT:
(これが使用されているかをよりよく説明)
1)エリアは、唯一のビジネスの顧客に関連しています。
2)地域は、顧客が持つ可能性のある異なる地域(地域、地域、部署)です。 (南地域、オックスフォード事務所、口座部)。
3)各エリアには、多くの従業員が割り当てられている場合があります。
SO
私は例えば地域管理者を持っていた場合、彼らは彼らの下に、以下の分野を持っているかもしれません。例えば:
- 南地域
- オックスフォードオフィス
- 販売部署
- アカウント部門
- ロンドン事務所
- 私は、地域管理者の下ですべての従業員のuser_idは年代を取得したい場合は
- 計画
- オックスフォードオフィス
SO
マーケティング、上記のdを使ってデータベース構造体を作成するには、次のようにする必要があります。
1)dbを照会して、地域管理者のparent_area_idを持つすべてのarea_idを取得します。各返さAREA_IDて
2)ループ、およびDBを照会し、返されたのparent_area_idを持つすべてのAREA_IDさんは
3をAREA_ID取得)我々は一番下のレベルに
を取得するまで返さAREA_ID年代をループし続けます4)にループは非常に効率的なようではありません返されたレコードSO
上記のすべてのAREA_IDを持つすべてのuser_idは年代を取得するには、DBを照会し、複数のSQLクエリやプログラミングを必要とします地域マネージャーに関連付けられているユーザーのリストを取得します。
それが最も効率的なやり方であれば、私は納得していないと思います。もっと簡単な方法が必要でしょうか?
これはどのようにして 'INT(12)'列になりましたか?デフォルトの 'INT'は' INT(11) 'です。また、 'parent_area_id'の' INT(8) 'についても言います。非常に魅力的な理由がない限り、普通の 'INT'を試してみてください。これらの小さな違いは大きな問題を引き起こす可能性があります。 – tadman
ありがとう@tadman正式には – frobak
も注目に値する:ほとんどの '_id'型フィールドは、関連があるかのように有用なインデックスを必要とし、照会する可能性が高く、照会する必要がある場合はそれを実行したい。 – tadman