機能依存関係をデータ構造として表現する方法を考えています。
(データベースの関係スキーマの) 機能依存関係は、属性のセットを属性のセットにマップします。たとえば、{A, B} -> {C, D} では、属性 C と D は機能的に A と B に依存します。
ここで、考えられる 4 つのケースを考えることができます。
- {A} -> {B} (2 つの単一属性)
- {A, B} -> {C} (属性のセットは単一の属性を意味します)
- {A} -> {B, C} (単一の属性は一連の属性を意味します)
- {A, B} -> {C, D} (属性のセットは属性のセットを意味する)
私の最初のアプローチは、単純な 2 メンバー クラスでした。
class attribute
{
string name;
set<attribute*> dependent_on;
}
これは、(1) のような機能依存関係では機能しますが、(2) - (4) では機能しないと思います。確かに (3) を分解することはできますが、(2) と (4) をそのようなクラスで表現する方法がわかりません。
CとD が AとB に機能的に依存しているという情報を保持する必要があるためattributegroup
、属性のセットが属性のセットにマップされるようなクラスを作成する必要があります。例えば:
class attributegroup
{
set<attribute*> members;
set<attribute*> dependent_on;
}
attributegroup
したがって、実際には、1 つの属性を 1 つのメンバーのみを持つとして単純に表すことができます。しかし、これが最善の方法だとは思いません。
どんな助け/考えも感謝します:)