我正在构建一个html标签和属性的数据库。 ul标签具有li标签作为父/子关系。 li标签具有'value'属性,因此它实际上不是父/子关系。 'value'是属性,而不是标签。
您如何设置表结构来处理父/子关系以及属性?
create table tag
(tagid int identity primary key
,tagName varchar(max)
)
go
create table prop
(propid int identity primary key
,parentid int
,childid int
)
go
我可以在'prop'表中添加另一个字段,以确定这是否真的是父/子关系或属性关系:
alter table prop
add typeid int
但我是从错误的道路开始的吗?
答案 0 :(得分:1)
您需要的是三个表:Tag,TagProperty和TagToTagProperty。
尝试下面的代码:
CREATE TABLE Tag (
Id INT IDENTITY(1,1) PRIMARY KEY,
Name VARCHAR(126),
ParentTagId INT NULL
)
GO
CREATE TABLE TagProperty
(
Id INT IDENTITY(1,1) PRIMARY KEY,
Name VARCHAR(126)
)
CREATE TABLE [dbo].[TagToTagProperty](
[Id] [int] IDENTITY(1,1) NOT NULL,
[TagId] [int] NOT NULL,
[TagPropertyId] [int] NOT NULL
CONSTRAINT PK_TagToTagProperty_TagId_TagPropertyId PRIMARY KEY (TagId, TagPropertyId)
) ON [PRIMARY]
GO
INSERT INTO TAG (Name, ParentTagId)
VALUES('UL', NULL); --UL tag has no parent therefore ParentId is Null
INSERT INTO TAG (Name, ParentTagId)
VALUES('LI', 1); -- LI tag has a parent therefore parentId is one
INSERT INTO TagProperty (Name)
VALUES ('value')
go
/*
Linking table between tag and attributes
*/
INSERT INTO TagToTagProperty( TagId, TagPropertyId)
VALUES
(1,1),
(1,2)