数据库多级联动表结构设计

29 篇文章 3 订阅
18 篇文章 0 订阅

以省市区县四级联动为例:

方案一:

建立多个数据库表,低级表结构中只包含上一级表中id。

省表市表区表县表
provincecitydistrictcounty
idprovince_idcity_iddistrict_id

优点:

  1. 此设计完全解开了各层之间的耦合性,用类似于链表的形式将多层数据关系起来。
  2. 可以节约大量的数据库空间。
  3. 维护方便。如果发生了新增和修改操作时,只要修改与之相关的那个表的主键即可。

缺点:

  1. 跨级查询效率低下。如查询河北省下有哪些县,需要查询三次涉及三张表才能查到结果。

方案二:

也就是方案一的改进版,低级表持有所有高级表的id,从而获得查询性能上的提升。

省表市表区表县表
provincecitydistrictcounty
idprovince_idcity_iddistrict_id
  province_idcity_id
   province_id

优点:

  1. 跨级查询性能较高。

缺点:

  1. 表结构混乱,冗余字段增加,占用较多数据库空间。
  2. 新增和删除操作复杂,效率不高,维护性差,需要考虑数据完整性和一致性。

方案三:

方案二的改进版,采用自关联(递归)的方式设计。

idpidname
10河北省
21唐山市
31保定市
42迁安县
6....

优点:

  1. 节省数据库空间,表结构清晰,容易维护。
  2. 无限级别的层次关系,扩充性强。

缺点:

  1. 不能明确看出层次关系,无法实现排序。
  2. 跨级查询效率不高。

方案四:

待补充。

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
设计图书多级目录的数据库表结构,可以考虑以下几个表: 1. book表:存储书籍的基本信息,如书名、作者、出版社等。 2. category表:存储所有的分类信息,包括主分类和子分类,例如“哲学”、“古代哲学”、“中国哲学”等。 3. book_category表:建立书籍和分类之间的关联关系,一个书籍可以对应多个分类,一个分类也可以对应多个书籍。 4. chapter表:存储书籍的章节信息,包括章节标题、页码等。 5. category_chapter表:建立分类和章节之间的关联关系,一个分类可以对应多个章节,一个章节也可以对应多个分类。 6. chapter_parent表:建立章节和父级章节之间的关联关系,一个章节可以有多个父级章节,一个父级章节也可以对应多个子章节。 其中,book_category表和category_chapter表都是多对多的关系表,需要额外建立一个中间表来存储它们之间的关联关系。chapter_parent表则是自关联表,用来存储章节和父级章节之间的关系。 具体的表结构可以参考下面的SQL语句: ``` CREATE TABLE book ( id INT PRIMARY KEY, title VARCHAR(255), author VARCHAR(255), publisher VARCHAR(255) ); CREATE TABLE category ( id INT PRIMARY KEY, name VARCHAR(255), parent_id INT, FOREIGN KEY (parent_id) REFERENCES category(id) ); CREATE TABLE book_category ( book_id INT, category_id INT, PRIMARY KEY (book_id, category_id), FOREIGN KEY (book_id) REFERENCES book(id), FOREIGN KEY (category_id) REFERENCES category(id) ); CREATE TABLE chapter ( id INT PRIMARY KEY, title VARCHAR(255), page_number INT ); CREATE TABLE category_chapter ( category_id INT, chapter_id INT, PRIMARY KEY (category_id, chapter_id), FOREIGN KEY (category_id) REFERENCES category(id), FOREIGN KEY (chapter_id) REFERENCES chapter(id) ); CREATE TABLE chapter_parent ( child_id INT, parent_id INT, PRIMARY KEY (child_id, parent_id), FOREIGN KEY (child_id) REFERENCES chapter(id), FOREIGN KEY (parent_id) REFERENCES chapter(id) ); ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值