Код: Выделить всё
CREATE TABLE FOLDERS (
ID INTEGER NOT NULL,
NAME VARCHAR(256) NOT NULL,
PARENTID INTEGER
);
CREATE TABLE FILES (
FOLDERID INTEGER NOT NULL,
FILENAME VARCHAR(256) NOT NULL
);
Код: Выделить всё
ALTER TABLE FILES ADD CONSTRAINT FK_FILES FOREIGN KEY (FOLDERID) REFERENCES FOLDERS (ID)
Таблица FOLDERS
Код: Выделить всё
1 А NULL
2 Б 1
3 В 2
Таблица FILES
Код: Выделить всё
3 X
3 Y
2 Z
Имеется также хранимая процедура, возвращающая полный путь от указанной папке. Например от GETPARENTS(3) вернет A/Б/В.
Код: Выделить всё
CREATE PROCEDURE GETPARENTS (
ID INTEGER)
RETURNS (
FULLPATH VARCHAR(2048))
AS
declare variable did integer;
declare variable oid integer;
declare variable name varchar(256);
BEGIN
FULLPATH='';
WHILE (:ID IS NOT NULL) DO
BEGIN
SELECT F.ID, F.PARENTID, F.NAME
FROM FOLDERS F
WHERE F.ID = :ID
INTO :DID, :OID, :NAME;
ID = :OID;
FULLPATH = :NAME || '\' || FULLPATH;
END
SUSPEND;
END
Код: Выделить всё
select getparents(folders.id), filename from files inner join folders on folders.id=files.folderid where filename = 'A'
