将表存储在没有主键的数据库中是不好的做法?

时间:2017-10-22 15:15:05

标签: python sqlite

我目前正在使用python中的列表实现,它将持久列表存储为数据库: https://github.com/DarkShroom/sqlitelist

我正在解决设计问题,似乎SQLite允许我在没有主键的情况下存储数据?

self.c.execute('SELECT * FROM unnamed LIMIT 1 OFFSET {}'.format(key))

这行代码可以通过绝对行引用

来检索

这是不好的做法吗?我会在任何时候放弃数据顺序吗?也许用sqlite可以,但我的设计不会转换为其他数据库引擎?来自更熟悉数据库的人的任何想法都会有所帮助。我这样写,所以我不必处理数据库!

1 个答案:

答案 0 :(得分:1)

documentation说:

  

如果返回多行的SELECT语句没有ORDER BY子句,则返回行的顺序是未定义的。

因此,您不能简单地使用OFFSET来识别行。

PRIMARY KEY约束只是告诉数据库必须对PK列强制执行UNIQUE和NOT NULL约束。如果您没有声明PRIMARY KEY,则不会自动强制执行这些约束,但这并不会改变您在访问它们时必须以某种方式识别行的事实。

存储列表条目的最简单方法是将列表中的位置作为单独的列。 (如果您的程序占用大部分时间插入或删除列表条目,最好将列表存储为数组而不是链接列表,即数据库不存储位置而是存储指向下一个条目。)