Пожалуйста, помогите мне разработать схему базы данных для этого: - PullRequest
0 голосов
/ 17 марта 2011

Я разрабатываю приложение на python, которое работает с базой данных.Я планирую использовать sqlite.Есть 15000 объектов, и каждый объект имеет несколько атрибутов.Каждый день мне нужно добавлять некоторые данные для каждого объекта. (Может быть, создать столбец с датой в качестве его имени).

Однако я хотел бы легко удалить данные, которые слишком старые, но это очень сложноудалить столбцы с помощью sqlite (и это может быть медленно, потому что мне нужно скопировать необходимые столбцы, а затем удалить старую таблицу)

Есть ли лучший способ организовать эти данные, кроме создания столбца для каждой даты?Или я должен использовать что-то кроме sqlite?

Ответы [ 3 ]

1 голос
/ 17 марта 2011

Вероятно, будет легче разделить ваши данные на две таблицы, например, так:

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;

Я бы старался избегать постоянного изменения таблиц, обычно это указывает на плохой дизайн.

0 голосов
/ 17 марта 2011

Если ваша база данных в значительной степени представляет собой набор почти гомогенных данных, вы могли бы также пойти на более простую базу данных ключ-значение. Если основное действие, которое вы выполняете над данными, заключается в сканировании всего, оно будет работать значительно лучше.

Библиотека Python имеет привязки для популярных как "anydbm". Существует также имитирующий диктовку прокси над anydbm на полке. Вы можете выбрать ваши объекты с помощью атрибутов, используя любой сериализатор, который вы хотите (simplejson, yaml, pickle)

0 голосов
/ 17 марта 2011

Для этого размера в ДБ я бы использовал что-то еще. Я использовал sqlite один раз для медиа-библиотеки с примерно 10 тысячами объектов, и это было медленно, около 5 минут, чтобы запросить все и отобразить, поиски были: /, переключение на postgres сделало жизнь намного проще. Это касается только производительности.

Также может быть лучше создать индекс, который содержит дату и данные / столбец, который вы хотите добавить, и pk-ссылку на принадлежащий ему объект и использовать его для своих удалений, вместо того, чтобы постоянно изменять таблицу. Это можно сделать в sqlite, если вы передадите pk тип int и сохраните в нем pk объекта вместо использования внешнего ключа, как это было бы с mysql / postgres.

...