8.2.3 使用原子列值
使用原子列值的意思是对每一行的每个属性只存储一个数据。例如,我们需要知道每个订单都包含哪些图书,有几种方法可以实现。
一种方法是在Orders表中添加一列(Orders表中列出了所有已订图书),如图8-5所示。
图 8-5 通过这个设计,每行中已订图书的属性有多个值
从各方面来分析,这并不是一个好的设计。我们真正要做的是在一列里嵌入整个表——订单与图书相关联的表。当使用这种办法来实现列时,很难回答类似这样的问题,“《Java 2 for Professional Developers》一书有多少个订单?”,系统再也不能只计算匹配字段了,而必须分析每个属性值,看系统中是否包含一个匹配。
因为我们正在创建一个表中表,所以应该创建以下这样一个新表。这个新表叫Order_Items,如图8-6所示。
图 8-6 这样的设计使得搜寻已经订购的特定书籍变得容易
该表在表Orders和表Books之间建立一个关联。当两个对象存在多对多的关系时,这种类型的表是很常见的。在这个例子中,一个订单由许多图书组成,而且每一本图书都可以被多人订购。