应该是一个父子关系的表
供参考:ID int,主键
parentID int ,引用主键
field1,
field2,
.....ID parentID field1, field2
1 null 广告投入
2 1 户外广告
3 1 媒体广告
4 3 报刊
5 3 电视
6 1 增加内容1
7 1 增加内容2保持这种关系就可以了
供参考:ID int,主键
parentID int ,引用主键
field1,
field2,
.....ID parentID field1, field2
1 null 广告投入
2 1 户外广告
3 1 媒体广告
4 3 报刊
5 3 电视
6 1 增加内容1
7 1 增加内容2保持这种关系就可以了
有更好的方案就说出来,让大家见识见识
to:jackyliu(自由)s是结构不是结构,sorry.
t1_id
t1_name
....
t1_id t1_name
1 媒体广告
2 户外广告表t2: :广告明细
t2_id ;广告明细编号
t2_name ;广告明细名称
t2_id ;广告投入 t2_id t2_name t2_id
1 报刊 2
2 电视 2
所谓“自引用表”,是指这样的表:它又一个主键(例如id),还有一个外键(例如parentID),这个parentID所参照的就是它本身的主键id。也就是说,这个表的外键所参照的表就是它本身。
你的问题是一个树型结构在关系模型中的存储问题,LiaoCheng(光辉岁月) 的方案是对的,框架就应该如此实现。
不过,作为自引用表,还不能完全满足树的约束:
1、parentID必须允许可以为null,那么:
首先,表或者为空,或者至少要有一行的parentID为null(至少要有一个根);
其次,如果是一个森林,OK;如果是一棵树,则parentID为空的最多只能有一行。
2、不允许出现循环,直接循环或间接循环都不允许。从语义上来说,就是任何一个节点的租先不能是它本身。例如,“报刊”无论该如何进一步划分(如“期刊”、“报纸”),不能划分出一个“媒体广告”来。层次不限。也就是说,如果“媒体广告”的id为1,而“报刊”的parentID为1(“报刊”是“媒体广告”的儿子),那么,“报刊”的子孙(也就是说,以“报刊”id:4为parentID的行),其id 不能为1,不管直接或间接。
上述约束单从参照完整性(主、外键)是无法保证的,你必须另外想办法实现--一般说来,可采用触发子(insert trigger、update trigger、delete trigger)实现。