请帮我为此设计一个数据库架构:

时间:2011-03-17 05:42:23

标签: python sqlite data-modeling

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

但是,我想轻松删除太旧的数据但是很难用sqlite删除列(并且它可能很慢,因为我需要复制所需的列然后删除旧表)

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

3 个答案:

答案 0 :(得分:1)

将数据分成两个表格可能最简单:

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;

我会尽量避免改变表格,通常表示设计不好。

答案 1 :(得分:0)

对于db的那个大小,我会使用其他东西。我曾经使用sqlite一次用于一个大约有10k个对象的媒体库,而且它很慢,比如5分钟查询全部并显示,搜索是:/,切换到postgres使生活变得如此简单。这仅仅是性能问题。

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

答案 2 :(得分:0)

如果您的数据库几乎是几乎同源数据的集合,那么您也可以选择更简单的键值数据库。如果您对数据执行的主要操作是扫描所有内容,则效果会更好。

Python库将流行的绑定称为“anydbm”。在搁置中的任何dbm上还有一个模仿代理的代理。您可以使用您想要的任何序列化器(simplejson,yaml,pickle)使用属性来挑选对象