我正在尝试使用C#+ SQL构建应用程序结构。我想讨论我的想法是否有效,并询问你是否有更好的方法来做到这一点: 假设我正在建立一个信息库,用于对具有唯一/共同属性的子类别中的实体进行分类。 例如:
>Entities
>Living
>Plants
>Spore Bearing Plants
*hasSeed - FALSE
Seed Bearing Plants
*hasSeed - TRUE
>Animals
>Vertebrates
>Cats
*hasTail = TRUE
>Tiger
*averageLifeSpan = 23
>Humans
*hasTail =FALSE
*averageLifeSpan = someInt
>Human1
*name = george
*age = 35
现在,在运行时,我希望我的应用程序能够在脊椎动物级别的新子类别下引入昆虫时插入新结构,并构建唯一属性,例如字符串chitinColor
我的想法是: 为所有类别,子类别和物种构建一个db表:
id name parentID
0 Etity null
1 Plants 0
2 Animals 0
3 Vertebrates 2
4 Cats 3
5 Humans 3
6 Human1 5
7 Tiger 4
8 Spore Bearing Plants 1
9 Seed Bearing Plants 1
然后是每种数据类型的属性表
IntTable
id attributeName entityID
0 averageLifeSpan 3
1 age 5
BoolTable
id attributeName entityID
0 hasSeed 1
1 hasTail 3
最后,每种数据类型的值表:
IntValueTable
Id entityID attributeID value
0 7 0 23
1 6 1 35
BoolValueTable
Id entityID attributeID value
0 8 0 FALSE
1 9 0 TRUE
2 4 1 TRUE
3 5 1 FALSE
因此,在运行时,如果用户将物种族或新属性引入实体,它可以加起来。 这是最可行的方法吗?我看到它看起来像是对XML文件的调用,但我不知道C#中有很多XML操作,尽管我在SQL方面很擅长。 感谢您耐心阅读 此致
答案 0 :(得分:0)
您正在考虑的模式称为Entity Attribute Value。一般来说,如果你提出了EAV,人们会在他们的呼吸下嘟a一个诅咒。例如,Magento(一个常见的电子商务平台)使用EAV进行产品索引,它会导致问题如此庞大,以至于第三方编写程序只是为了通过EAV表并定期对其进行非规范化。
话虽如此,它有其用途。我认为this answer试图权衡利弊。