hallo Ihr,
ich entwickle gerade an einer Statistik-Applikation und habe mich dabei für die folgende Struktur der Tabellen entschieden. Im Backend wird zudem eine PostgreSQL-Datenbank verwendet.
Die Tabelle "property" enthält alle gängigen Eigenschaften eines Browsers.
Die Werte der entsprechenden Eigenschaften werden in "value" hinzugefügt, hierbei gibt es keine doppelten Datensätze! Vor dem Einfügen wird geprüft, ob der Wert bereits in der Tabelle vorhanden ist:
-> wenn ja, wird die entsprechende id geschickt
-> wenn nein, wird der neue Wert hinzugefügt und der aktuelle Index der Sequenz zurückgegeben
Die Verbindung zwischen dem jeweiligen Benutzer, der Eigenschaften und der Werte wird in "content" hergestellt.
property
--------
id name
1 UserAgent
2 RemoteAddr
3 ScreenWidth
4 ScreenHeight
value
-----
id data
3 IE
4 127.0.0.1
content
-------
value_id property_id user_id
1 3 1
2 4 1
Weiterhin möchte ich die Anzahl der User ermitteln, bei denen UserAgent="IE" und RemoteAddr="127.0.0.1" existiert. Dafür nutze ich derzeit den unten stehenden Query, allerdings scheint mir dieser doch noch sehr riesig zu sein:
select count(distinct(content.user_id))
from config.property as property,
data.value as value,
data.content as content
where content.value_id = value.id
and content.property_id = property.id
and (
select count(distinct(content.user_id))
from config.property as property,
data.value as value,
data.content as content
where content.value_id = value.id
and content.property_id = property.id
and property.name = 'userAgent'
and value.data = 'IE'
) > 0
and (
select count(distinct(content.user_id))
from config.property as property,
data.value as value,
data.content as content
where content.value_id = value.id
and content.property_id = property.id
and property.name = 'remoteAddr'
and value.data = '127.0.0.1'
) > 0
- Was haltet Ihr von der Aufteilung der Tabellen?
- Kann man den Query vereinfachen?
Über ein paar nette Tipps würde ich mich sehr freuen! Danke.
Bis dahin,
Martin