Hi,
i want to save a lot of data (measurement values). The structure is,
that i have dataloggers (which produce data), sensors (are connected
to the datalogger with foreignkey), and projects. every logger is
connected to one project (foreignkey). then, there is a app called
Data.
i have the following data model:
class Entry(models.Model):
"""
a data entry. Normaly, it is one row from a measurement file
a new entry has one datetime, a project, and a logger_serial
"""
project = models.ForeignKey(Project)
logger = models.ForeignKey(Logger)
original_file = models.ForeignKey(OriginalFile)
datetime = models.DateTimeField(help_text='the date and time of
the measurement entry', db_index=True)
class Meta:
unique_together = [('logger', 'datetime')]
ordering = ['project', 'logger', 'datetime']
class Measurand(models.Model):
"""
A Model for measurement data
"""
entry = models.ForeignKey(Entry)
sensor = models.ForeignKey(Sensor)
class Meta:
unique_together = [('entry','sensor')]
ordering = ['entry', 'status']
class MeasurandAverage(models.Model):
"""
Model to store the average value for a measurand
"""
measurand = models.OneToOneField(Measurand, parent_link=True)
value = models.FloatField(help_text='the average measurement
value', db_index=True)
unit = models.CharField(help_text='the unit of the measurement
value', max_length=20, db_index=True)
class MeasurandMax(models.Model):
"""
Model to store the max value for a measurand
"""
measurand = models.OneToOneField(Measurand, parent_link=True)
value = models.FloatField(help_text='the max measurement value',
db_index=True)
unit = models.CharField(help_text='the unit of the measurement
value', max_length=20, db_index=True)
class MeasurandMin(models.Model):
"""
Model to store the min value for a measurand
"""
measurand = models.OneToOneField(Measurand, parent_link=True)
value = models.FloatField(help_text='the min measurement value',
db_index=True)
unit = models.CharField(help_text='the unit of the measurement
value', max_length=20, db_index=True)
class MeasurandSigma(models.Model):
"""
Model to store the standard derivation (sigma) value for a
measurand
"""
measurand = models.OneToOneField(Measurand, parent_link=True)
value = models.FloatField(help_text='the sigma measurement value',
db_index=True)
unit = models.CharField(help_text='the unit of the measurement
value', max_length=20, db_index=True)
now, i want to receive a list with all Measurand and also the Average,
Max, Min, Sigma Values for every measurand.
The problem is, that when i have a list with 50 measurands and access
the measurandmax in my template with {{measurand.measurandmax.value}},
this produce a query. and also every access to max, min and sigma
produces a query.
When i have a list with 100 Measurand, i have about 400 queries to get
the data.
The queries look like this:
SELECT "data_measurandaverage"."id",
"data_measurandaverage"."measurand_id",
"data_measurandaverage"."value", "data_measurandaverage"."unit" FROM
"data_measurandaverage" WHERE "data_measurandaverage"."measurand_id" =
1
SELECT "data_measurandmin"."id", "data_measurandmin"."measurand_id",
"data_measurandmin"."value", "data_measurandmin"."unit" FROM
"data_measurandmin" WHERE "data_measurandmin"."measurand_id" = 1
SELECT "data_measurandmax"."id", "data_measurandmax"."measurand_id",
"data_measurandmax"."value", "data_measurandmax"."unit" FROM
"data_measurandmax" WHERE "data_measurandmax"."measurand_id" = 1
SELECT "data_measurandsigma"."id",
"data_measurandsigma"."measurand_id", "data_measurandsigma"."value",
"data_measurandsigma"."unit" FROM "data_measurandsigma" WHERE
"data_measurandsigma"."measurand_id" = 1
Any ideas how i can improve the queries or the structure of my models?
cheers,
tom
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---