Autor Zpráva
kzaoral
Profil
Zdravím, v téhle oblasti(databáze) jsem pole neorané. Spadl na mě úkol poradit si s návrhem databáze pro následující typ záznamu:

TDatum = record
Dilna1 .. Dilna7: Byte;
JeProvoz1 .. JeProvoz24: Boolean;
end;

Jde o to zaznamenávat, jestli v daný den v jedné ze sedmi dílen byl během 24 hodin nějaký provoz, tedy např. jakýkoliv odběr energie. Ve výsledku by měla být zobrazená tabulka pro vybraný den, rozdělená na sedm polí(místností) po 24 čtverečcích(hodinách), buď modrých, když JeProvoz:= false, nebo červených.
Poradí někdo jak udělat tu tabulku(tabulky)? Mě napadají samé zhůvěřilosti, jako třeba vytvořit 7*24 dílnohodin - pak by se to vešlo do jednoho řádku, ale to je blbost, musí té jít nějak elegantně.
Díky, Karel
ShiraNai7
Profil
Stačí mít v tabulce záznam jen v případě, že byl nějaký provoz. Tzn. je záznam = byl provoz. Není záznam, nebyl provoz.
Potom by mohla mít následující sloupce. Stačí tři. Je mnohem lepší míc více záznamu a méně sloupců, než naopak. To pak svádí k nějakým dílnohodinám :P

dilna - cislo dilny (1-7)
datum - datum provozu
hodina - hodina provozu (0-23)


Pokud to děláš pro MySQL, tak takovou tabulku vytvoříš .. takto:

--
-- Struktura tabulky `provoz`
--

CREATE TABLE IF NOT EXISTS `provoz` (
  `dilna` tinyint(3) unsigned NOT NULL,
  `datum` date NOT NULL,
  `hodina` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`dilna`),
  KEY `datum` (`datum`)
) ENGINE=MyISAM;


A výpis by byl jednoduchý..
SELECT * FROM `provoz` WHERE `datum`='RR-MM-DD' ORDER BY `hodina`


V čem to chceš zpracovávat nevím, takže se nebudu obtěžovat psát PHP skript pro výpis, abych to nedělal zbytečně.
kzaoral
Profil
ShiraNai7:
Psát to budu v Delfích přes BDE, ale to nakódování je detail. Jen nevím, jestli jsme se pochopili. Těch dílen je sedm a je nutné diskrétně určit, kdy se ve které pracovalo. Takže na dotaz: "vypiš, kdo kdy odebíral proud 27.1." to musí vyhodit následující:
Dílna 1 v době od 7-11, od 22-24
Dílna 2 v době od 1-3, v 5, od 7-11, v 21
etc
etc
from provoz je jasný - vybere tabulku, ze které se čerpá. Where datum je taky jasný, vyspecifikuje data, kterých se to týká. ale order by hodina podle mě znamená, že to vypíše všechny hodiny bez ohledu na to, ve které dílně byly odpracovány.

(aby byl jasnější záměr, berte to jako že zaměstnavatel chce hlídat co dělají dělnící v pracovní době - nemakají, není odběr - a jestli mu po pracovní době nedělaj melouchy. Tím, že ví, ve které dílně se po pracovní době odebíral proud, ví, který stroj pracoval (jedna dílna jeden stroj))

Nebo jsem to pochopil špatně?
ShiraNai7
Profil
kzaoral:
Těch dílen je sedm a je nutné diskrétně určit, kdy se ve které pracovalo.
A v čem je problém? V tabulce máš číslo dílny, hodinu provozu a datum. Co víc potřebuješ?

dotaz: "vypiš, kdo kdy odebíral proud 27.1."
SELECT * FROM `provoz` WHERE `datum`='2011-01-27'

("kdo" odebíral nevím, to v zadání nebylo, ale stačí přidat sloupec)

Jak si výsledek času seřadíš/zpracuješ/zobrazíš už je na tobě.
kzaoral
Profil
ShiraNai7:
Aha, tak díky. Jen jsem nepochopil (a nechápu) princip, jak se dané hodiny přidělí k dané dílně. No, až budu doma u stroje, tak to namodeluju a podívám se, jak to vlastně pracuje. Hezký víkend,
Karel
ShiraNai7
Profil
kzaoral:

Vycházel jsem z toho, co jsi popsal v 1. příspěvku - a to bylo:

Ve výsledku by měla být zobrazená tabulka pro vybraný den, rozdělená na sedm polí(místností) po 24 čtverečcích(hodinách), buď modrých, když JeProvoz:= false, nebo červených.

A tak tam mám sloupce pro data, která by byla potřebná pro sestavení takové tabulky. Další funkcionalita v návrhu není.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0