我是SQL新手,想对以下问题提供任何帮助。我有以下代码为节点和树创建表,但不知道如何在我的代码中实现以下规则。SQL树结构表
create table Node(
NodeId int not null,
ParentId int null,
NodeName varchar(255) not null,
constraint PK_Node primary key(NodeId),
constraint UK_NodeName unique(NodeName)
)
go
create table Tree(
NodeId int not null,
ParentId int not null,
Level int not null,
constraint PK_Tree primary key(NodeId, ParentId),
constraint UK_Level unique(NodeId, Level)
)
go}
alter table Node
\t add constraint FK_NodeNode foreign key(ParentId) references Node(NodeId) --on delete cascade;
alter table Tree
\t add constraint FK_NodeTreeNode foreign key(NodeId) references Node(NodeId) on delete cascade;
设想一个树结构,具有以下性质:
- A)单一根节点
- b)每个节点可以具有多个子节点
- c)节点可能不是d e)所有非根节点都有一个属性,最多的子节点 - 新节点默认为固定默认值
- e)最大子节点属性可随时更改 - 如果新值较小比当前的儿童节点数量多,孩子们分布在沿途所有节点的财产链中。如果该属性设置为零,则该节点成为根节点的直接子节点。
- f)当添加一个新节点时,它将被添加到尽可能接近根节点的节点,按照儿童百分比配额排序递增。如果所有节点都满足其配额,则直接放置在根节点下。
创建表和索引来存储这些信息和程序,以尽可能有效地执行以下操作:
- 我。将节点添加到树
- ii。更改节点的最大子节点属性
我不知道如何设置列出的约束条件(如节点可能不会被删除)。像我可以以某种方式在表格创建中定义这些约束吗? –
防止删除通常通过触发器完成。 – RedFilter
老实说,我昨天就开始使用SQL,所以我拥有的就是使用谷歌和阅读其他论坛的想法。我真的不知道关于外键的任何信息。但我认为ParentId应该不为null。 –