在关系型数据库的表设计中,使用继承和多态
基于 Web 开发的互联网应用,仍然在使用关系型数据库,如 MySQL。在表设计上,引入继承和多态,可以解决一些常见的问题。
下面是举例:在电商网站,一定会涉及到商品,假设商品只包含图书和手机。
将图书和手机,看做独立的商品,各自有单独的表结构:

优点:独立的表结构设计,结构清晰
缺点:有重复的、统一字段,如:title, price;
丢失统一字段的索引,如:
a. SKU, 产品统一编号的简称,每种产品均对应有唯一的SKU号, 因此需要在多个表中,维护其唯一性;
b. 搜索 title 包含 ‘手机’的商品,既要搜索 books, 又要搜索 phones 表。若这样独立的商品种类越多,越麻烦。
将图书和手机,看做统一的商品,设计在一张表中:

优点:解决了第1种设计存在的重复字段、索引的缺点
缺点:多余、冗余的字段,不仅占用多余的存储空间,同时使该表结构变的复杂,使用上容易产生困惑;
随着商品种类的增多,该表结构会更复杂。
将图书和手机,看做独立的商品,各自有单独的表结构:

优点:解决了第1、2种设计存在的缺点;
能够较好的适应未来的变化
缺点:创建时需要维护表之间 关系;
读取时,需要关联表查询
将图书和手机,看做独立的商品,各自有单独的表结构:

优点:解决了第1、2种设计存在的缺点;
能够较好的适应未来的变化;
Rails 已经有了很好的支持
缺点:应用层需要维护表之间的关系
2013-02-13