Hibernate逍遥游记
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 创建关系数据库表

悟空在他所熟悉的MySQL关系数据库中创建了一张名为“MONKEYS”的表,表的结构如图1-1所示。

图1-1 MONKEYS表的结构

MONKEYS表用来存放猴子的基本信息,比如名字(NAME字段)、年龄(AGE字段)和性别(GENDER字段)。

MONKEYS表中的ID字段为主键(Primary Key,简称PK)。数据库表通过主键来保证每条记录的唯一性,每条记录的ID值都是唯一的。表的主键最好不具有任何业务含义,即不代表特定业务领域的某种信息。任何有业务含义的字段都有可能随着业务需求的变化而被改变。关系数据库学的最重要的理论之一就是:不要给主键赋予任何业务含义,这样可以提高数据库系统的可维护性。

假如主键具有了业务含义,会出现什么情况呢?以MONKEYS表为例,假定把NAME字段作为主键,这是一个具有业务含义的主键。假定一开始用户的业务需求为:NAME字段为6位字符串,过了一年后,用户改变了业务需求,规定NAME字段为8 位字符串。当业务需求改变后,就必须修改MONKEYS表中所有记录的NAME主键的值,此外,对于那些参照MONKEYS表,并且把NAME字段作为外键的所有其他表,也需要修改表中所有记录的NAME外键的值。由此可见,主键如果具有业务含义,那么即使业务含义发生很小的变化,也可能会给数据库系统造成极大的维护上的开销。

为了使表的主键不具有任何业务含义,一种比较常用的解决方法是使用代理主键,例如,为表定义一个不具有任何业务含义的ID字段(也可以叫其他的名字),专门作为表的主键。