私は2つのテーブル、staff
とusers
を持っています。以下は、テーブルの短縮バージョンです。 (* = PK、#= FK)スタッフとユーザーを別々のテーブルに入れて、別のテーブルに一般的なaccountIDを与える方法
staff { staffID*, username, ... }
users { userID*, username, ... }
私は、これらのテーブルは、それらがaccountID
与えられている方法でそれらを一緒にリンクするテーブルを持っているように、それを作りたいです。
私はlocalID
はどちらかである
accounts { accountID*, accountType, localID# }
... ...これはの線に沿って何かになることを考えていました。アカウントがstaff
テーブルの場合はstaffID
、users
テーブルの場合はuserID
です。 accountType
は、アカウントがどこのテーブルであるかを示すために使用され、可能な値はstaff
とuser
です。
最初にオフ - このようにすることは可能ですか?これは良いアイデアですか? staff
テーブルとusers
テーブルの両方にフィールドusername
があるので、代わりにとlocalID
の代わりにaccounts
テーブルのusername
を使用する必要がありますか?次に
(username
「FOO」とstaff
テーブルのレコードが存在する場合は、次いでusername
「foo」でとuser
テーブルのレコードが存在することはできません) - テーブルが上記である場合図1のすべての例には受け入れられるだろうと、私はこれを実装する必要があります方法は、私が追加する必要があるだろうか制約図に例のに対し、それはとても& localID
accountType
は、このようなユニークで作るための重複組み合わせている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は持つことができます。
提供されているヘルプ/ガイダンスをお寄せいただきありがとうございます。
「staff」アクションの特権を持っていれば、その値に頼ることができるように、「role」という余分な列を1つのテーブルに入れてみてください。 – verhie
これまであなたが言ったことはありましたが、私は、 'user'が' staff'ロールを取ることができないように、この選択肢が作られ/変更されるページにifステートメントを持つハードコーディングされたselect要素を持たないようにします。 – AskMeOnce
よかったです。そして、スタッフのIDだけを保持している別のテーブルを1つのテーブルに置くことはできません。したがって、IDがtable2にもある場合、ユーザーはスタッフだけです。ある時点では、ユーザーデータを持つ2つのテーブルがあることを後悔します。 – verhie