2016-04-15 2 views
0

私は2つのテーブル、staffusersを持っています。以下は、テーブルの短縮バージョンです。 (* = PK、#= FK)スタッフとユーザーを別々のテーブルに入れて、別のテーブルに一般的なaccountIDを与える方法

staff { staffID*, username, ... } 

users { userID*, username, ... } 

私は、これらのテーブルは、それらがaccountID与えられている方法でそれらを一緒にリンクするテーブルを持っているように、それを作りたいです。

私はlocalIDはどちらかである

accounts { accountID*, accountType, localID# } 

... ...これはの線に沿って何かになることを考えていました。アカウントがstaffテーブルの場合はstaffIDusersテーブルの場合はuserIDです。 accountTypeは、アカウントがどこのテーブルであるかを示すために使用され、可能な値はstaffuserです。

最初にオフ - このようにすることは可能ですか?これは良いアイデアですか? staffテーブルとusersテーブルの両方にフィー​​ルドusernameがあるので、代わりにとlocalIDの代わりにaccountsテーブルのusernameを使用する必要がありますか?次に

username「FOO」とstaffテーブルのレコードが存在する場合は、次いでusername「foo」でuserテーブルのレコードが存在することはできません) - テーブルが上記である場合図1のすべての例には受け入れられるだろうと、私はこれを実装する必要があります方法は、私が追加する必要があるだろうか制約図に例のに対し、それはとても& localIDaccountTypeは、このようなユニークで作るための重複組み合わせている2accountTypeおよびlocalIDはしませんか?

図1

|-----------|-------------|---------| 
| accountID | accountType | localID | 
|-----------|-------------|---------| 
|  1  |  A  | 1 | 
|  2  |  B  | 1 | 
|  3  |  A  | 2 | 
|  4  |  B  | 2 | 
|-----------|-------------|---------| 

図2

|-----------|-------------|---------| 
| accountID | accountType | localID | 
|-----------|-------------|---------| 
|  1  |  A  | 1 | 
|  2  |  A  | 1 | 
|  3  |  B  | 2 | 
|  4  |  B  | 2 | 
|-----------|-------------|---------| 

推論 - 私は役割ベースのアクセス制御をしたいので、スタッフとユーザーへのためにこれらの別々のテーブルをしたいが、私スタッフアカウントのみが持つことができるロールがあるようにしてください&他のロールがあります。 ccountは持つことができます。

提供されているヘルプ/ガイダンスをお寄せいただきありがとうございます。

+0

「staff」アクションの特権を持っていれば、その値に頼ることができるように、「role」という余分な列を1つのテーブルに入れてみてください。 – verhie

+0

これまであなたが言ったことはありましたが、私は、 'user'が' staff'ロールを取ることができないように、この選択肢が作られ/変更されるページにifステートメントを持つハードコーディングされたselect要素を持たないようにします。 – AskMeOnce

+0

よかったです。そして、スタッフのIDだけを保持している別のテーブルを1つのテーブルに置くことはできません。したがって、IDがtable2にもある場合、ユーザーはスタッフだけです。ある時点では、ユーザーデータを持つ2つのテーブルがあることを後悔します。 – verhie

答えて

0

あなたの探しているものを達成するstaffIdとuserテーブルにaccountIdを追加します。

+0

これを行うと、どのように私は 'account_'の' auto_increment'主キーを持っているので、スタッフとユーザーは_same_ 'accountID'を持つことができませんか?auto_incrementというフィールドを1つしか持たない新しいテーブルを作成します(または、私はちょうど私が+1するたびにレコードを更新するので、大量のレコードはありません)、 'accountID'の' next'値を格納しますか?これが最善の方法だと思いますか? – AskMeOnce

+0

アカウントが作成されると、ユーザーまたはスタッフに関連付けると、seテーブルをパレート化することもレコードを1で更新することも心配する必要はありません。Offcourseは、推奨されているようにロールタイプテーブルを作成することですが、現在のデザインではスタッフテーブルとユーザテーブルの両方にnull null accountIdカラムがあり、 –

+0

私の 'roles'テーブルの正当な' roleType'フィールドを作って、 'roleID'を持つ' accounts'テーブル内の 'users'と' staff'をすべて私の最初のコメント質問は示唆している。たぶん私はこれを過度に複雑化しています。 – AskMeOnce

関連する問題