表示功能依赖关系的数据结构
Data structure to represent functional dependencies
我正在考虑如何将功能依赖关系表示为数据结构。
功能属性(数据库的关系架构)将一组属性映射到一组属性。 例如,在 {A, B} -> {C, D} 中,属性 C 和 D 在功能上依赖于 A 和 B。
我可以在这里想到四种可能的情况:
- {A} -> {B} (两个单一属性)
- {A, B} -> {C} (一组属性意味着单个属性)
- {A} -> {B, C} (单个属性意味着一组属性)
- {A, B} -> {C, D} (一组属性意味着一组属性)
我的第一个方法是一个简单的双成员类:
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
。但我不认为这是最好的方法。
任何帮助/想法:)
我不会将依赖项存储在属性中:
include <iostream>
#include <map>
#include <vector>
struct Attribute;
typedef std::vector<Attribute> Attributes;
struct Attribute {
char name;
operator Attributes () const { return Attributes{ 1, *this }; }
};
inline bool operator < (const Attribute& a, const Attribute& b) {
return a.name < b.name;
}
inline bool operator < (const Attributes& a, const Attributes& b) {
return std::lexicographical_compare(
a.begin(), a.end(),
b.begin(), b.end());
}
inline std::ostream& operator << (std::ostream& stream, const Attributes& attributes) {
for(const auto& a: attributes) {
std::cout << a.name;
}
return stream;
}
typedef std::multimap<Attributes, Attributes> AttributeDependencies;
typedef AttributeDependencies::value_type AttributeDependency;
int main(int argc, const char* argv[]) {
Attribute a {'A'};
Attribute b {'B'};
Attribute c {'C'};
Attribute d {'D'};
AttributeDependencies dpendencies;
dpendencies.insert(AttributeDependency(a, b));
dpendencies.insert(AttributeDependency(Attributes{a, b}, c));
dpendencies.insert(AttributeDependency(a, Attributes{b, c}));
dpendencies.insert(AttributeDependency(Attributes{a, b}, Attributes{c, d}));
for(const auto& d: dpendencies) {
std::cout << '{' << d.first << "} -> {" << d.second << "}n";
}
return 0;
}
注意:std::map 可能是正确的容器,但 std::multimap 适合示例数据。
相关文章:
- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何解析表示树状数据结构的字符串
- 我对数据结构、双向链表有一些问题
- googletest:测试太大的数据结构
- 用于存储分组关系和支持外观的最佳数据结构
- 代表软件包安装和系统依赖关系的最佳数据结构
- 数据结构:多(A)对多(B)关系,每个链路也有自己的数据(C)
- 在C++关系之前发生的数据结构
- 表示功能依赖关系的数据结构
- C++数据结构,用于存储两组唯一元素之间的多个关系
- 用于存储元组键的数据结构:参数关系列表