我正在尝试设计一个可以被动地用于“被动”的数据库。识别(并可选地分配)对象适合的任何/所有类别。以下是我目前正在实施的方式,但之前没有这样做,我想看看是否有人更好地了解如何去做。我正在使用Symfony与MySQL和Doctrine。
1 /。定义对象的表:
元素表,其中包含动物可能拥有的功能。该表将随着时间的推移而发展 - 例如,当有动物的动物被添加时:
ID NAME CRITERIA
1 Leg 0-100
2 Arm 0-2
3 Pouch Boolean
4 Horn 0-2
Animal 表,提供有关数据库中每只动物的个人信息:
ID NAME Gender Weight DOB
1 Gertrude F 450 2010-01-01
2 Shiela F 200 2008-01-01
3 Bruce M 250 2012-01-01
Identity 表,用于指定将 Elements 分配给每个 Animal :
ANIMALID ELEMENTID COUNT DESCRIPTION
1 1 4
1 4 0
2 1 2
2 2 2
2 3 True // Female kangaroo has a pouch
3 1 2 Strong hind legs
3 2 2
3 3 False // Male kangaroo has no pouch
以上我很清楚。但是,我希望能够被动地识别/分配当前对象满足所需条件的类别。理想情况下,当用户填写表单以创建新的 Animal 时,他们将能够看到他们当前符合条件的列表,因为他们添加/删除元素< / kbd>(例如Cow,Mammal,Bovine,Quadruped)。
继续这个例子:
2 /。定义类别的表:
Class 表,用于定义类别的必需属性:
ID NAME WEIGHTMIN WEIGHTMAX HEIGHTMIN HEIGHTMAX AgeMax
1 Adult Cow 220 1000 . 200 50
2 Kangaroo . 100 . . .
Class_Feature 表,它还通过额外需要的一对多关联来定义 Class 的强制功能。注意:GROUPID
标识所需要的功能组,SUBGROUPOF
标识选项是否嵌套在额外的强制性要求下(例如,公牛/母牛有角):
CLASSID GROUPID SUBGROUPOF ELEMENTID GENDER MIN MAX
1 1 . 2 . 0 0 // A cow can't have any arms
1 2 1 4 M 1 2 // Male cows have horns
1 2 1 4 F 0 0 // Female cow can not have horns
2 1 . 3 M 0 0
2 1 . 3 F 1 1