前言
使用自引用表的范围挺大的。这次我们是拿设计数据库表来做例子。
最近小白在设置数据库的时候遇到了困难,那就是收货地址数据库表。为什么呢?因为收货地址表是防止数据冗余的,比喻我们有三个地址如下
我们发现如果把这个地址直接在一个表字段存储的话地址被红圈圈出的部分会造成冗余,因此自引用表设计就派上用场了
示例
我们来看下面的图片,用一个name字段存储 省、市、区、县、街道还有镇,大概到这里吧。用parentid字段记录当前行的上一级,比喻广州市的上一级是1,id为1的是广东省,海珠区的上一级id是3,id为3的是广州市,依次类推。这就是自引用表,还有人说不是还有详细地址吗?xx小区xx栋,淡定,其实我们的表还有一些字段没写出来的,后面我会贴出SQL语句作为参考学习。
SQL语句
# 地址表
CREATE TABLE fs_address(
a_id INT PRIMARY KEY AUTO_INCREMENT
# 用户id
,a_mem_id INT
# 收货名字
,a_reviceName VARCHAR(20)
# 区域表id
,a_area_id INT
# 收货详细地址
,a_reviceAddress VARCHAR(200)
# 收货号码
,a_revicePhone VARCHAR(50)
);
# 区域表
CREATE TABLE fs_areas
(
area_id INT PRIMARY KEY AUTO_INCREMENT
# 区域名
,area_name VARCHAR(50)
# 区域编号
,area_code VARCHAR(50)
# 备注
,area_remark VARCHAR(100)
# 父级区域id
,area_parentid INT
)
如有不足,请多多包涵。