Python 请帮助我为此设计数据库架构:

Python 请帮助我为此设计数据库架构:,python,sqlite,data-modeling,Python,Sqlite,Data Modeling,我正在设计一个与数据库一起工作的python应用程序。我计划使用sqlite。 有15000个对象,每个对象都有几个属性。每天我都需要为每个对象添加一些数据(可能创建一个以日期为名称的列) 但是,我希望能够轻松地删除太旧的数据,但是使用sqlite删除列非常困难(而且可能会很慢,因为我需要复制所需的列,然后删除旧表) 除了为每个日期创建列之外,还有更好的方法来组织这些数据吗?或者我应该使用sqlite以外的东西吗?对于这种大小的db,我会使用其他东西。我曾经将sqlite用于一个有大约10k个对

我正在设计一个与数据库一起工作的python应用程序。我计划使用sqlite。 有15000个对象,每个对象都有几个属性。每天我都需要为每个对象添加一些数据(可能创建一个以日期为名称的列)


但是,我希望能够轻松地删除太旧的数据,但是使用sqlite删除列非常困难(而且可能会很慢,因为我需要复制所需的列,然后删除旧表)


除了为每个日期创建列之外,还有更好的方法来组织这些数据吗?或者我应该使用sqlite以外的东西吗?

对于这种大小的db,我会使用其他东西。我曾经将sqlite用于一个有大约10k个对象的媒体库,它的速度很慢,查询和显示只需5分钟,搜索结果是:/,切换到postgres让生活变得更加轻松。这只是性能问题


另外,最好创建一个包含日期、要添加的数据/列以及对其所属对象的pk引用的索引,并将其用于删除,而不是一直更改表。如果给pk一个int类型并将对象的pk保存到sqlite中,而不是像mysql/postgres那样使用外键,则可以在sqlite中完成此操作。

可能最容易将数据分成两个表,如下所示:

CREATE TABLE object(
    id        INTEGER PRIMARY KEY,
    ...
);

CREATE TABLE extra_data(
    objectid  INTEGER,
    date      DATETIME,
    ...
    FOREIGN KEY(objectid) REFERENCES object(id)
);
这样,当您需要删除某个日期的所有条目时,将很容易:

DELETE FROM extra_data WHERE date = curdate;

我会尽量避免一直修改表,这通常表明设计不好。

如果您的数据库几乎是同质数据的集合,那么您也可以选择一个更简单的键值数据库。如果您对数据执行的主要操作是扫描所有内容,那么它的性能会显著提高


Python库为流行的“anydbm”提供了绑定。在shelve中,还有一个dict模拟代理位于anydbm之上。您可以使用所需的任何序列化程序(simplejson、yaml、pickle)使用属性对对象进行pickle处理。

将日期放在列中有什么问题?但是,我希望轻松删除太旧的数据,但使用sqlite删除列非常困难(这可能会很慢,因为我需要复制所需的列,然后删除旧表)在列中,而不是列中。我不明白列中的日期是什么意思。我如何添加和删除不同日期的数据?作为
WHERE
子句中的一个范围。嗯,我认为最好将一个对象的所有数据放在一行中,因为我需要查看数据的趋势,并处理这些数据…@jck:“我认为将一个对象的所有数据放在一行可能更好”。请买一本关于数据库设计的书并阅读。这种想法通常是错误的。