SQLite,多对多表,相对引用

时间:2019-03-21 19:52:32

标签: database sqlite

假设我有一个表 eventsInHistory (对不起,我不知道创建表结构的漂亮方法):

编号| -日期-|名称

1 ---------------- 17760704-独立签名声明

2 ---------------- 19551105-布朗博士发明了时空旅行

现在我有第二张桌子 peopleInHistory

编号|名称

1 ----------------托马斯·杰斐逊

2 ----------------布朗博士

...以及第三个表 peopleAtEvents

personNumber | eventNumber

1 ------------------------------- 1

2 ------------------------------- 2

现在,让我说我听说了一个新事件,Doc Brown时光倒流,认识了Thomas Jefferson。 SQLite(和/或DBrowser)中是否有一种方法可以自动递增以使事件按时间顺序编号,还可以递增它们可能具有的任何链接;换句话说,将 eventsInHistory peopleAtEvents 表自动转换为以下内容:

编号| -日期-|名称

1 ---------------- 17760704-独立签名声明

2 ---------------- 17760706-布朗博士遇到了托马斯·杰斐逊

3 ---------------- 19551105-布朗博士发明了时空旅行

personNumber | eventNumber

1 ------------------------------- 1

1 ------------------------------- 2

2 ------------------------------- 2

2 ------------------------------- 3

如果我需要将新链接添加到与事件和人员相关的表中,那很好,但是我要寻找的是将条目绑定到位置而不是数字,以便当我保存现有链接时去在我开始的地方添加一些东西。

1 个答案:

答案 0 :(得分:2)

据我了解您的问题-答案是否定的。自动增加的值是“消失”,并且只要不使用新数据重新创建表,就不会对自动增加的值进行重新排序。

您确定您真的需要重新排序吗?如果值是“有意义的”,则您始终可以查询表并以您喜欢的方式获取数据:

您要按时间顺序排列 eventsInHistory 表吗?只需查询即可:

SELECT * FROM eventsInHistory ORDER BY date;
SELECT * FROM peopleAtEvents ORDER BY personNumber, eventNumber;

如果您希望以这种方式访问​​数据而不必每次都输入该查询,则只需创建一个视图:

CREATE VIEW V_EventsOrderer AS
SELECT * FROM eventsInHistory ORDER BY date;