定义sqlite表的订单?

问题描述 投票:0回答:1

我目前正在创建一个 sqlite 数据库,我需要在其中定义一个排名系统。 每个级别必须在层次结构中具有唯一的位置。 我想到的第一个方法是创建一个

position
属性来指示排名位置,如下所示:

CREATE TABLE IF NOT EXISTS ranks (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    position INTEGER NOT NULL UNIQUE,
)

问题是,如果我想在列表中间插入一个成绩,我必须重新定义其上方所有成绩的

position

经过一番研究,我遇到了其他解决方案,它们创建了

parent_id
属性,它是引用
id
的外键,并且似乎使用“递归查询”检索数据,但我不知道这种方法是否有效在这种情况下很好。

你知道最好的方法吗?

sql database sqlite foreign-keys relational-database
1个回答
0
投票

浮动位置:

CREATE TABLE IF NOT EXISTS ranks_real (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    position REAL
);
DELETE FROM ranks_real;
INSERT INTO ranks_real (name, position) values ('ONE', 1);
INSERT INTO ranks_real (name, position) values ('TWO', 2);
INSERT INTO ranks_real (name, position) values ('BETWEEN ONE AND TOO', (1+2)/2.0);
SELECT * FROM ranks_real ORDER BY position;

位置/换位

CREATE TABLE IF NOT EXISTS ranks_two_indexes (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    position INTEGER,
    sub_position INTEGER
);
DELETE FROM ranks_two_indexes;
INSERT INTO ranks_two_indexes (name, position, sub_position) values ('ONE', 1, 0);
INSERT INTO ranks_two_indexes (name, position, sub_position) values ('TWO', 2, 0);
INSERT INTO ranks_two_indexes (name, position, sub_position) values ('BETWEEN ONE AND TOO', 1, 1);
SELECT * FROM ranks_two_indexes ORDER BY position, sub_position;
© www.soinside.com 2019 - 2024. All rights reserved.