我正在阅读Silberschatz一书中关于基于对象的数据库。它通过以下示例解释了类型继承:
create type Person
(
name varchar(20),
address varchar(20)
);
现在我们可以使用类型继承,如:
create type Student under Person
(
degree varchar(20),
department varchar(20)
);
我想我明白了这一点。现在我创建一个类型为Person的表:
create table people of Person;
但现在如果我想创建一个学生类型的表。我应该这样做:
create table students of Student;
OR
create table students of Student under people;
/*which is described in the book as table inheritance*/
以上两者有什么区别?因为我们在定义类型时已经继承了Person,所以在创建Student类型的表时是否需要继承Person(person)类型的表?
如果有人能通过一个例子来解释这一点,那将会更加清晰。
答案 0 :(得分:0)
不幸的是,类和继承的世界以及数据库的世界并不总是相互映射。
在此示例中,一种方法是创建2个表:
<强>人强>
<强>学生强>
如果您使Student.Person_Id不为null,则表示每个学生在Person表中都有一行。您需要其他东西,索引或约束(在数据库中)或逻辑(在操作数据库的代码中)来强制学生记录如果对您来说很重要,则不会共享人员记录。
这些表的示例数据:
<强>人强>
<强>学生强>
12和15人是人,但不是学生。第13和第14人分别与学生859和860相关联。
请注意,如果您实际构建了这个,那么您可能会将事情分开一些(在数据库中说,将事物规范化):
<强>地址强>
<强>人强>
<强>度强>
<强>系强>
<强>学生强>