あなたは、高レベルの言語を使用していた場合は言っていなかったので、私はちょうどDB-のような例で、一般的な例をあげる:
データベースの設計が困難です。だから、これは素早く簡単な答えになるでしょう。
あなたの質問は、データ関係とデータベース設計に関する基本的な質問です。この回答を助けるための基本的なハウツーガイドを検索してください。あなたの情報がどのようにグループ化されているかを考え、他のセット(テーブル)からプライマリセット(テーブル)に "バック"をリンクすることが役立ちます。
したがって、ユーザーはユーザーであり、ユーザーのテーブルです。ユーザーに関連付けられた主な共通要素(列)が含まれている必要があります。
次に、この他の情報セット(パーミッションなど)は別のテーブルです。
この他の表に、参照先のユーザーを指す値(列)があることを確認してください。だから
- integer "id" <--- unique, index column, auto-increment
- integer "user_id" <--- this is which user this belongs
- ...
- Boolean "can_write" <--- example data column
- Boolean "can_read" <--- example data column
- Boolean "can_reboot_system" <--- example data column
- etc, whatever you want
:あなたはおそらく「インデックス」
(など、検索性能を向上させるために)それらの間例えば、ユーザのための「許可」テーブルのようなものを作成するために、データベースをお伝えしたいと思いますあなたは "SELECT * FROM user_table WHERE first_name = 'joe'(など)...ユーザーを取得することができます。その行を識別するための何らかの種類の 'id'値があることを願っています。さて、 'SELECT * FROM permissions where WHERE user_id =' nnnn '(そのユーザーIDは何でも)
ユーザーが1つのアクセス権セットしか持っていない場合は、追加の "id"カラムなしでそのuser_idを持つことができます。
ありがとう、dj_segfault。 私はあなたのオプション#1を使い、共通のフィールドを持つユーザーテーブルと、より多くの「特定の」ユーザーテーブルによって参照されるuserTypeフィールドを作成しました。 NULLSは間違いなく頭痛を引き起こしていました、私は今それらを取り除くことがうれしいです! – littleK
私は間違っている(私は間違っている)場合は、誰かが共通のフィールドは、fname、lname、電子メール、pwのような "ユーザー"レベルにあったような方法で自分のデータを格納する場合... 。 1つのクエリでより多くのユーザー固有の情報を取得する方法はありませんか?それ以上の特定の情報を得るには、ユーザータイプに基づいて常に2番目のクエリが使用されます。 – ackerchez
@ackerchez確かにあります。すべての情報を取得するために必要なのは、UIDが何であれ、メインユーザーテーブルを持つすべてのユーザータイプ固有のユーザーテーブルを内部結合することだけです。そのユーザー・タイプではない表の列はNULLになります。 –