如果我有一个叫动物的类,狗和鱼是子类。 动物具有称为“颜色”的属性。 狗具有称为“尾长”的属性,并且鱼没有此属性。 鱼具有称为“重量”的属性,狗没有这个属性。
所以,我想设计一个数据库来存储这些信息。我该怎么办?以下是一些想法:
创意1: 制作动物表,并且桌子有类型,找到什么样的动物,如果它是狗,只是从狗桌得到结果。
动物: 颜色:字符串 类型:整数
类型: 狗:0 鱼:1
犬: TailLength:INT
鱼: 重量:INT
创意2: 只在数据库中存储Dog表和Fish表,删除动物表。
犬: 颜色:字符串 TailLength:int
鱼: 颜色:字符串 重量:int
答案 0 :(得分:12)
您提到的两种方法:
可以由另外两个补充:
每种方法都有利有弊。这里有一个很好的概述:
另请参阅以下SO主题:
最后,应该注意的是,有面向对象的数据库(又名对象数据库,或OODBMS),它们在数据库中更自然地表示对象,并且可以轻松解决这个问题,尽管我不认为它们在行业中经常使用。下面是一些描述此类数据库的链接,与关系(和其他)数据库相比,虽然它们不会在这个问题上给出完整的目标(heh)视图:
答案 1 :(得分:0)
你可以这样试试:
Animal
PK animal_id
FK animal_type
STRING animal_name (eg. 'Lassie')
AnimalTypes
PK animal_type
STRING animal_type_name (eg. 'Dog')
AnimalAttributes
PK attribute_id
STRING attribute_name (eg. 'tail length')
AnimalToAttributes
PK id
FK animal_id
FK attribute_id
INTEGER value (eg. 20)
通过这种方式,每只动物可以拥有一个或多个属性(由您自行决定)。
答案 2 :(得分:0)
使用一对一或零关系正如您所注意到的那样,在数据库架构设计语言中,这些表称为class - sub-class或superclass
Create Table Animal
(animalId Integer Primary Key Not null,
Other columns generic to all animals)
Create Table Birds
(BirdId Integer Primary Key Not Null
references Animal(AnimalId),
-- other columns)