2011-01-15 12 views
1

私は、ユーザーが自分のホスティングアカウントを管理できるようにするアプリケーションに取り組んでいます。現時点では、データベースはユーザーテーブルとホストアカウントテーブルです。しかし、私はこれらをテーブルにリンクする最良の方法は何かを知りません。データベース設計:特定のページへのアクセスを持つユーザー

ユーザーのテーブルには、 "owned_accounts"という名前の列があり、そのデータは "5,18,28"のように挿入され、アプリケーションで分割されますか?どのような提案がありますか?

答えて

2

ユーザーに利用可能なアカウントを見つけるためにこれらの3つのテーブルを結合することができますこの方法。

ホスティングアカウントは複数のユーザーが所有できるのであれば、hostingaccountsownershipsなどの余分なテーブルを追加するには、をownershipid ユーザーIDhostingaccountid、そこからフェッチ。

+0

あなたの答えと@ pablichan'sは非常に似ています。 * ownershipid *列を作成することを提案するのはなぜですか?どのように役立つだろうか? –

+0

所有権の列は、ユーザーがホスティングアカウントに持つ権利の数のように、テーブルを個別に有効にする追加の情報を追加したい場合に便利です。あなたのテーブルが動作する必要はありません。あなたは1:nの関係が必要な場合、これはSQLでn:mの関係を使用するための既知の唯一の方法であるため、答えは似ています。@ pablochanの1つに含まれていない私の答えの部分は正しい方法です。 –

+0

1:nは1ユーザーがhostingaccountsを所有できることを意味し、n:mはアカウントを共有し、各アカウントに複数の所有者がいることを意味します。 –

0

2つの列user_id、account_idを持つ3番目のテーブルを作成します。これにより、1人のユーザーを複数のアカウントに接続することができます。一つだけ、ユーザがホスティングアカウントの所有者であることができれば、あなたが簡単にOWNERIDようhostingaccountsに外部キーを使用するなど

0

ユーザーが複数のホスティングアカウントを持つことができる場合は、リンクテーブルUserId + HostingAccountIDがキーとして必要です。

0

hostingaccountsレコードのユーザーが1対1の関係であれば、ソリューションはうまく動作しますが、ユーザーが複数のhostingaccountを持つ可能性がある場合は、列「user_id」がホスティングアカウントテーブルに存在する必要があります。

多対多リレーションシップが必要な場合は、user_idとhosting_account_idを保持する3番目の表を作成できます。

ベストアンサーは、実際にはシステムの目標と制約に依存します。あなたは制約を強制するためにさまざまな方法でuser_accounts上のキーを定義することができます

users(
    user_id (PK) 
) 

accounts(
    account_id (PK) 
) 

user_accounts(
    user_id references users(user_id) 
    ,account_id references accounts(account_id) 
) 

要件に応じて:あなたの説明を使用して

0

私は次のエンティティとの関係を参照してください

1. primary key(user_id) 

ユーザー1つのアカウントしか所有できません。アカウントはマルチプルユーザーが所有している可能性があります。

2. primary key(account_id) 

ユーザーが複数のアカウントを所有している可能性があります。アカウントは1人のユーザーのみが所有できます。

3. primary key(user_id, account_id) 

ユーザーは複数のアカウントを所有している可能性があり、アカウントは複数のユーザーが所有できます。

上記のいずれにも該当しない場合は、追加情報を提供する必要があります。

関連する問題