网站数据结构概述

课后整理 2021-2-25

本案例所用的数据都存储在Access中,这样任何用户都可以在本地使用家庭账本,而不用为构建企业级数据库而操心。

同时本案例摒弃了服务器的支持,读者可以在本地直接打开家庭账本,并进行数据库读写操作。从而避免因为搭建服务器环境,而让广大初学者望而生畏。由于后台技术相对复杂,所以本例就避重就轻,为读者提供了一种更加轻便的家庭级Web应用解决新方案。

整个数据库(data/home.mdb)中的数据表如图1所示,表之间的关系如图2所示。数据库访问密码为admin。

为了防止数据库文件被他人恶意盗取,在发布应用时更改扩展名mdb为asp,然后在数据库连接时把数据库连接的文件名改为home.asp即可。使用Access打开数据库的访问密码为admin。

var conn = connection("家庭日志.html", "data/home.asp");

图1 home.mdb数据库和数据表

图2 home.mdb数据表关系图

本案例的数据结构相对比较复杂,特别是数据表之间的关系,相互交织在一起,很容易让人迷糊,当读者在阅读代码或者编写代码时,必须对于这个关系非常清楚,大脑高度清晰。为了方便读者理清它们之间的关系,这里以自定义数组结构的方式呈现它们复杂的关系。

//===================================
//数据表集合对象
//第1个元素表示数据表在分类表中的自动编号,0表示不存在编号
//第2个元素表示名称
//第3个元表示素映射的分类表
//第4个元素表示关联的主表id
//第5个元素表示数据表分类
//第6个元素表示数据表分类类型
//第7个元素表示编号
//第8个元表示素映射的分类表
//第9个元素表示映射upperid的表格
//第10个元素表示被引用的明细表,no表示没有
var tableobj = {
//表名称	明细表upperid 0	标签1	向上关联class表2 	所属表ID 3 向下关联分类或明细表 4
//分类 5	  编号 6	 向上关联class表7 向上关联upperid表8	 被多表引用9
'out' : 		[14, 	'家庭支出', 			"class2", 	0,		"outdetail",			"data",		1, 
"class2", 	"no",			"no"],
'income' : 	[15, 	'家庭收入', 			"class2", 	0,		"incomedetail",		"data",		2, 
"class2", 	"no",			"no"],	
'blog' : 	[16, 	'家庭日志', 			"class2", 	0,		"blogdetail",		"data",		3, 
"class2", 	"no",			"no"],
'incomedetail' :[0, 	'收入明细', 		"class3", 	15,		"no",				"detail",		4,
"class3", 	'income',		"no"],
'outdetail' : 		[0, 		'支出明细', 	"class3", 		14,			"no",			"detail",	5, 	"class3", 	'out',			"no"],	
'blogdetail' : 	[0, 		'博客明细', 	"class3", 		16,			"no",			"detail",	6, 	"class3", 	'blog',		"no"],
'class1' : 		[0, 		'一级分类', 	"no", 		1,			"class2",		"class",	7, 	"no", 		"no",		"no"],
'class2' : 		[0, 		'二级分类', 	"class1", 		2,			"class3",		"class",	8, 	"no", 		"class1",	['out', 'income','[blog]']],
'class3' : 		[0, 		'三级分类', 	"class2", 		3,			"no",			"class",	9, 	"no", 		"class2",	['outdetail', 'incomedetail','blogdetail']]
};