level 11
Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,是构建电信应用的控制系统平台——开放式电信平台(OTP)的一部分。
写了一点点相关代码,放在上面,^_^
2013年05月15日 01点05分
1
level 11
hrl文件配置
%定义员工信息
-record(employee,{
id,
name,
address,
age,
iphone}).
%定义部门信息
-record(dept,{id,
name,
address,
remark,
sum}).
%定义项目信息
-record(project,{id,
name,
pronumber}).
%定义员工与部门之间的关系
%定义部门与管理者的关系
-record(manager,{emp,
dept}).
%定义员工和部门所属关系
-record(at_dept,{emp,
dept_id}).
%定义员工与项目之间的关系
-record(in_project,{emp,
pro_id}).
2013年05月15日 01点05分
2
level 11
启动和初始化mnesia,分别建立各自record的mnesia的表
init() ->
mnesia:create_table(employee,[{attributes,record_info(fields,employee)}]),
mnesia:create_table(dept,[{attributes,record_info(fields,dept)}]),
mnesia:create_table(project,[{attributes,record_info(fields,project)}]),
mnesia:create_table(manager,[{type,bag},{attributes,record_info(fields,manager)}]),
mnesia:create_table(at_dept,[{type,bag},{attributes,record_info(fields,at_dept)}]),
mnesia:create_table(in_project,[{type,bag},{attributes,record_info(fields,in_project)}]). %%
%% TODO: Add description of start/function_arity
%%
start() ->
mnesia:create_schema(node()),
mnesia:start(),
init().
2013年05月15日 01点05分
3
level 11
新增mnesia表格数据,
%% Author: Administrator
%% Created: 2013-1-7
%% Description: TODO: Add description to mnesia_insert
-module(mnesia_insert). %%
%% Include files
%%
-include("../include/mnesiatest.hrl").
%%
%% Exported Functions
%%
-export([insert_emp/3,insert_dept/1,insert_pro/1,insert_manager/1]). %%
%% API Functions
%%
%增加员工以及员工部门,员工项目之间关系信息
insert_emp(Emp,Deptid,Projectnames) ->
Ename=Emp#employee.name,
Fun =fun()->
mnesia:write(Emp),
Addept=#at_dept{emp=Ename,dept_id=Deptid},
mnesia:write(Addept),
foreachinert(Ename,Projectnames)
end,
mnesia:transaction(Fun).
%增加部门信息
insert_dept(Dept)->
Fun =fun()->
mnesia:write(Dept)
end,
mnesia:transaction(Fun).
%增加项目信息
insert_pro(Project)->
Fun = fun()->
mnesia:write(Project)
end,
mnesia:transaction(Fun).
%增加部门管理者信息
insert_manager(Manager)->
Deptid=Manager#manager.dept,
Enames=Manager#manager.emp,
Fun = fun()->
manager(Deptid,Enames)
end,
mnesia:transaction(Fun). %%
%% Local Functions
%%
foreachinert(Ename,[Projectname|Tail])->
mnesia:write(#in_project{emp=Ename,pro_id=Projectname}),
foreachinert(Ename,Tail);
foreachinert(_,[])->
ok. manager(Deptid,[Ename |Tail])->
mnesia:write(#manager{emp=Ename,dept=Deptid}),
manager(Deptid,Tail);
manager(_,[])->
ok.
2013年05月15日 01点05分
4
level 11
测试调用
%%
%% 测试
%%
insert_tmp()->
%增加部门
Dept=#dept{id=1,name="开发部",address="22层",remark="开发部",sum=8},
insert({dept,{Dept}}),
%增加项目
Project=#project{id=1,name="wlan网管",pronumber=1111},
insert({project,{Project}}),
%增加员工
Emp=#employee{id=1,name=zhaobowei,address=zhongguo,age=1000,iphone=1111},
insert({employee,{Emp,1,1}}),
%增加部门领导
Manager=#manager{emp="zhaobowei",dept="开发部"},
insert({manager,{Manager}}).
2013年05月15日 01点05分
5
level 11
测试查询新增数据的结果,显示出来
querymnesia(Method) ->
case Method of
{qlc}->
Fun =fun()->
Q=qlc:q([E#employee.name || E <- mnesia:table(employee)]),
qlc:e(Q)
end,
mnesia:transaction(Fun);
{mnesia}->
Fun = fun()->
Female = #employee{name=zhaobowei,_='_'},
mnesia:select(employee,[{Female,[]}])
end,
mnesia:transaction(Fun)
end.
2013年05月15日 01点05分
6
level 11
我也在学习的过程中,就先写这些,mnesia的简单应用,^_^
2013年05月15日 01点05分
7