🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych
Article #195550

Re: struktura bazy do zbierania danych z czujników

#195550
From: irq
Date: Sat, 10 Feb 2018 20:13
65 lines
5747 bytes
Kolego, odniosłem wrażenie, że czepiasz się sczegółów, jakbyś chciał mnie przeegzaminować. Jeżeli naprawdę tego chesz i się postarasz, to zapewniam Cię, że obleję. Przykłady które napisałem, nie są projektem, a lużną ilustracją. Ponieważ zadałeś pytania i piszemy publicznie, poniżej odpowiadam, choć nie mam ochoty angażować się w utarczki.

W dniu sobota, 10 lutego 2018 19:14:09 UTC+1 użytkownik geos napisał:
> On 10.02.2018 19:02, irq wrote:
> > Definicja tabeli próbek danych mogłaby być taka jak:
> >
> > CREATE TABLE data_sample (
> >     id          bigserial PRIMARY KEY,
> >     dt          timestamp,
> >     sensor_id   integer, -- albo text? - prawdopodobnie powtórzenie któregoś elementu z sample - celowy nadmiar dla usprawnienia agregacji i dostępu
> >     sample      json     -- albo jsonb - i tutaj dowolna struktura
> > );
> 
> a taka byłaby niedobra?
> 
> CREATE TABLE data_sample (
>    sensor_id ..
> , dt timestamp default systimestamp
> , wielkość_fizyczna varchar2(..)
> , value varchar2(..) )

byłaby równie dobra, a przede wszystkim uniwersalna. Uczepiłem się postgresa, bo autor wątku wymienił go pośród preferowanych systemów. A skoro jest w nim typ json, z całym zestawem stojących za nim funkcji i operatorów (np. sample->'wielkość_fizyczna') to zaproponowałem właśnie ten typ. 

> 
> po co w swojej tabeli masz id skoro jest naturalny klucz główny 
> (sensor_id, dt)?

czytałem w jakieś książce o relacyjnych bazach danych, że naturalne klucze główne są niedobre. Nie pamiętam szczegółów, pamiętam zasadę o przynajmniej starannym rozważeniu takiej decyzji. Jednak to co piszesz może mieć sens, a książka którą czytałem mało wybitna. Niewykluczone więc, że po wnikliwej analizie można podjąć decyzję projektową o zastosowaniu (sensor_id, dt) jako klucza głównego.

> 
> > "dt" oraz "sensor_id" są uchwytami do modelu relacyjnego i przetwarzania danych w kierunku ich przygotowania do raportowania. "sample" zawiera całą pozostałą, nie w pełni zdefiniowaną jeszcze, zawartość danych.
> 
> co to jest "uchwyt do modelu relacyjnego"? przeczytałem kilka książek o 
> bazach relacyjnych 

Bez złośliwości - czy mógłbyś podać tytuły? Na pewno nie o każdej słyszałem, więc pewnie skorzystam. Czy którąś szczególnie polecasz? 

> ale nie spotkałem się z takim określeniem.

też go nie spotkałem, a wymyśliłem go doraźnie, dla zwięzłości, chcąc oddać sens rozgraniczenia pomiędzy "częścią relacyjną" a "częścią nierelacyjną" "modelu hybrydowego", który wyłonił się w toku rozwoju dyskusji. Nie pytaj mnie, proszę, o sens tych określeń i nie wyszukuj ich wystąpień w literaturze, bo prawdopodobnie ich tam nie ma. Zauważ jednak, że pojawiła się tutaj jakby próba połączenia dwóch tradycyjnie skonfliktowanych światów SQL i NoSQL i problem z terminologią jakiej by w tych rozważaniach można było użyć.

Dla (nieformalnej) ilustracji tego "uchwytu" i w nawiązaniu do "tablicy ewidencji czujników", o której pisałem wcześniej:

CREATE TABLE sensor (
    id          serial PRIMARY KEY, -- nie pytaj
    sensor_id   integer           , -- a może text? 
    start       timestamp         , -- kiedy zainstalowany
    stop        timestamp DEFAULT 'infinity', -- kiedy zabrany
    location    text, -- "jakiś adres, albo współrzędne"
);

Działanie owego "uchwytu" można wyrazić poprzez:

SELECT  d.dt,
        d.location,
        s.sample->'temperatura' AS temperatura,
        s.sample->'wiatr'       AS wiatr
FROM    data_sample d
JOIN    sensor s
ON      d.sensor_id = s.sensor_id
    AND d.dt BETWEEN s.start AND s.stop

Ponownie - nie aspiruje ten przykład do bycia optymalnym ani niekoniecznie obrazuje złączenie z całą tabelą data_sample. To ilustracja. 

Przepraszam za nadużycie skrótu myślowego.
Technical Details
Message-ID: <f8c91030-4efd-4f83-bf53-68d9f14d5372@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!o66no385364ita.0!news-out.google.com!s63ni820itb.0!nntp.google.com!w142no385168ita.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <p5an7s$eou$1@node2.news.atman.pl> <d33f511a-0c12-4805-abd0-06577cabc391@googlegroups.com> <5a7c85c5$0$671$65785112@news.neostrada.pl> <8689e094-71f6-4189-86ef-0e9bf74ce2a1@googlegroups.com> <5a7da595$0$670$65785112@news.neostrada.pl> <bfecb350-16cc-4b59-8a3d-68cf4972fb55@googlegroups.com> <5a7f1c60$0$676$65785112@news.neostrada.pl> <95d9656f-cca4-400a-bd81-5ba4bad843bc@googlegroups.com> <5a7f366f$0$576$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
X-Received: by 10.107.150.67 with SMTP id y64mr5375409iod.107.1518293612162;        Sat, 10 Feb 2018 12:13:32 -0800 (PST)
X-Received: by 10.157.87.132 with SMTP id q4mr272338oth.2.1518293611926; Sat, 10 Feb 2018 12:13:31 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!o66no385364ita.0!news-out.google.com!s63ni820itb.0!nntp.google.com!w142no385168ita.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.bazy-danych
Date: Sat, 10 Feb 2018 12:13:31 -0800 (PST)
In-Reply-To: <5a7f366f$0$576$65785112@news.neostrada.pl>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=83.28.125.218; posting-account=HsGcpQoAAABR8eqXdcgZHaZMq6uPUZY5
NNTP-Posting-Host: 83.28.125.218
References: <p5an7s$eou$1@node2.news.atman.pl> <d33f511a-0c12-4805-abd0-06577cabc391@googlegroups.com> <5a7c85c5$0$671$65785112@news.neostrada.pl> <8689e094-71f6-4189-86ef-0e9bf74ce2a1@googlegroups.com> <5a7da595$0$670$65785112@news.neostrada.pl> <bfecb350-16cc-4b59-8a3d-68cf4972fb55@googlegroups.com> <5a7f1c60$0$676$65785112@news.neostrada.pl> <95d9656f-cca4-400a-bd81-5ba4bad843bc@googlegroups.com> <5a7f366f$0$576$65785112@news.neostrada.pl>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <f8c91030-4efd-4f83-bf53-68d9f14d5372@googlegroups.com>
Subject: Re: struktura bazy do zbierania danych z czujników
From: irq <ipluta62@gmail.com>
Injection-Date: Sat, 10 Feb 2018 20:13:32 +0000
Lines: 105
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit