2011-10-19 7 views
0

エンティティ(ユーザーと開発者)を持つWebサービスを作成したいと考えています。ユーザーと開発者のデータベース設計

開発者はユーザーである場合とそうでない場合があります(私は彼がほとんどの場合ユーザーであることを期待しています)。 Web APIを使用して、自分のWebサービスの上にアプリケーションを作成することができます。例 - Facebookでは、developer.facebook.comにアプリケーションを作成することができます。ここではFBアカウントを使用してログインします。

私のクエリは - 私はユーザーと開発者のための別のテーブルを作成する必要がありますか?ユーザーには、一般的な開発者が持つ必要のない属性がいくつかあります。開発者は、一般的なユーザーには見えない特定の機能を見ています。

トレードオフ - 別々の2つのテーブルの場合、冗長なデータが存在しますが、ユーザーと比較して非常に少数の開発者しか期待していません。

同じテーブルの場合、冗長な属性があります。

このシナリオにはどのようなデザインが最適ですか?

答えて

0

一般的なユーザーが開発者からどのように異なっているかによって異なります。開発者には何の追加フィールドが必要ですか?そうでない場合、答えは単純です。両方のテーブルが1つです。 さらに、開発者テーブルに余分なフィールドとuser_idを加えただけの継承関係があると考えるかもしれません。

どのような余分なフィールドがあると思いますか?

0

どちらも完全に他のものから継承しない場合は、2つの別個のテーブルを使用することが理にかなっています。確かに、彼らはいくつかの同様の属性を持っているかもしれませんが、私はあなたが本当にユーザー/開発者を交換することは決してありません。

冗長性について本当に心配しているのであれば、デベロッパーテーブルの関連するレコードに格納される追加の属性を持つユーザーとして、開発者に自動的に署名することもできます。

要するに、実体が実際に100%離れていて、デベロッパーとしてDevに1回、アカウント間にリンクがないユーザーとして別の時間にサインする必要があるのは理にかなっています2つの別々のテーブル。しかし、開発者が拡張属性を持つ一種の「スーパーユーザー」と見なすことができる場合は、すべての基本レコードを独自のテーブルにDeveloper属性を追加してUsersテーブルに格納します(2番目のシナリオは私に)。

関連する問題