2011-01-13 6 views
2

私たちはPersonという単純なテーブルを持つデータベースを設計しています。各人は、顧客、職員、マネージャーなど、彼に関連するいくつかの役割を持つことができます。各ロールにはプロパティのリストが付属しているので、各ロールのテーブルもあります。人とロールとの関係を設計する

これで、人を役割のセットに接続する必要があります。これを行う最善の方法は何ですか?

これまでのところ、2つの設計を考え出しました。スケーラビリティと導入の可能性のあるスケーラビリティのどちらが最適かどうかはわかりません。また、データインテグリティの維持も重要です。

私たちの最初のデザインは、特定の役割を持つ人と、その役割のテーブル内のIDをマッピングする単一のテーブルを持つことになります。このソリューションは、それが自然に外部キーを使用して、データの整合性を強制ないという欠点を持っているプロセスの後半で追加、さらに役割に合わせて拡張だろうが、このテーブルのエントリは

personid: 5 
role: 2 (manager) 
roleid: 6 (the id to look for in the manager table) 

ようになります。

それぞれのマッピングテーブルは、それぞれのロールテーブルになります。だから、

personId: 5 
staffMemberId: 12 

に似たエントリにStaffMemberMappingテーブルが存在することになるこのソリューションは、FKSを介してデータの整合性を強制するだけでなく、いくつかのテーブルには、我々は彼がに関連している役割を参照するには、人を検索するたびに見て、私たちを必要とします。

これらのソリューションのどちらが適していますか?または、さらに良い点は、3つ目の素晴らしいソリューションがある場合は、ぜひご提案ください。

答えて

1

2つ目の解決策は自然な選択であると思われます。なぜなら、役割はオブジェクトのペア間の関係であり、別のテーブルを使ってリレーショナルデータベース内の個別の関係をモデル化するからです。 (2)に加え、パフォーマンスの問題がある場合にのみ、データベースを非正規化し、(2)に加えて(1)を追加して、データベースを正規化することをお勧めします。簡単なクエリのために。

関連する問題