0

CakePHP2とMySQLを使用して比較的単純なアプリケーションを作成しています。

Usersこのアプリケーションには、主に管理Adminパネルにアクセスできるユーザーがいます。

次にありますCustomersCustomers登録フォームに記入できます。Customerがユーザーによって承認された場合にのみ、顧客がログインできるようにAdminユーザーレコードが作成されます。Customer

UserID明らかに、に対してを保存する必要があるCustomerIDので、ユーザーレコードをレコードに関連付けることができますCustomer

UserIDこれは、とだけで構成される3番目のテーブルが必要であり、承認されCustomerIDた後にのみデータを入力することを意味しますか?Customer

編集:現時点では、各「顧客」は1つの「ユーザー」のみを取得するため、1:1の関係を追加します。

4

1 に答える 1

0

私があなたの質問を正しく理解していれば、データベースにはすでに2つのテーブルがあります。

UsersとのテーブルUserID, Name, AccessRights

CustomersとのテーブルCustomerID, Name, OtherSTuff

次に、これらのテーブル間に関係を作成します。ここで質問するのは、1人の顧客に対して何人のユーザーが存在する可能性があり、特定のユーザーに何人の顧客が関係している可能性があるかです。

個人的には、1人の顧客が複数の従業員をデータベースにアクセスさせる可能性があると思いますが、すべての(管理者以外の)ユーザーは1人の顧客にしか関連付けられません。これは1:Nの関係になります。1人の顧客にはN人のユーザーがいます。それに応じてデータベースモデルを変更するには、テーブルにCustomerID列が必要です。Users

私の推測が間違っていて、1人のユーザーにN人の顧客がいた場合、1人のユーザーが複数の顧客にアクセスする場合はUserID、テーブルに列が必要になりますCustomers

3番目のテーブルが必要になるのは、N人の顧客にM人のユーザーがいる場合だけです。つまり、1人のユーザーが複数の顧客にアクセスでき、1人の顧客複数のユーザーがアクセスできる場合です。

編集:データベースの整合性の部分を完全に省略して適用しました。

MySQLはFOREIGN KEY句をサポートしています-少なくともInnoDBなどの一部のストレージエンジンで使用する場合、MyISAMはまだサポートしていないと思います。外部キー句を使用すると、その列の値を外部テーブルの既存の値と一致させるか、にすることができますNULL。この動作が望ましくない場合は、列をとして宣言する必要がありますNOT NULL

通常のユーザーが設定している間CustomerID、管理者が使用できるようにユーザーを設定できます。ただし、これには注意点があります。この句を使用しないでください。使用しないと、顧客を削除すると、対応するユーザーが管理者になります。代わりに使用してください。NULLCustomerIDON DELETE SET NULLON DELETE CASCASE

于 2013-03-09T17:52:43.490 に答える