sqlite多对多+邻接列表

时间:2014-03-26 14:00:15

标签: sql sqlite

我正在使用sqlite,并希望拥有一个带有父列的多对多表,用于邻接列表功能。如:

CREATE TABLE YDelta                                                                                                                                                    
(                                                                                                                                                                      
    YDeltaThingId NCHAR(8) NOT NULL,                                                                                                                                   
    YDeltaTS TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, -- delta timestamp                                                                                          
    YDeltaStatus NCHAR(2) NOT NULL, -- 2-letter code for delta status                                                                                                  
    YDeltaStaffId NCHAR(10) NOT NULL, -- staff member                                                                                                                  
    YDeltaDesc TEXT NOT NULL,                                                                                                                                          
    YDeltaParentId ????                                                                                                                                                    
    PRIMARY KEY (YThingsId, YDeltaTS),                                                                                                                                 
    FOREIGN KEY (YDeltaThingId) REFERENCES YThings(YThingsId),                                                                                                         
    FOREIGN KEY (YDeltaStaffId) REFERENCES YStaff(YStaffId)                                                                                                            
);

。 。 。但我不确定如何构建YDeltaParentId。当然,它应该是主键的重复,它是YDeltaThingId NCHAR(8)和YDeltaTS TIMESTAMP列的组合。 (遵循此邻接示例:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

1 个答案:

答案 0 :(得分:2)

如果父键的列有两列,则子项中还需要两列:

CREATE TABLE YDelta (
    ...
    YDeltaParentThingId NCHAR(8),
    YDeltaParentTS TIMESTAMP,
    ...
    PRIMARY KEY (YThingsId, YDeltaTS),
    FOREIGN KEY (YDeltaParentThingId, YDeltaParentTS)
              REFERENCES YDelta(YThingsId, YDeltaTS),
    ...
)