sql >> Databáze >  >> RDS >> Mysql

Optimální návrh pro databázi s opakující se událostí

Jen bych vytvořil záznam pro každé opakování události, v určitém horizontu. Znamená to však, že budete potřebovat další tabulku, kterou můžete použít k promítnutí dat, pokud budou procházet datem vašeho horizontu. To znamená, že budete potřebovat tabulku událostí, která obsahuje jeden záznam pro každý výskyt opakované události (1. ledna, 8. ledna, 15. ledna, ... až prosinec), a tabulku s každým dostupným záznamem pro nasazování budoucích let (začátek datum:1. led; opakování:7.; až:2011), abyste mohli na začátku roku 2012 (nebo jakmile uživatel požádá o zobrazení měsíce 2012+) generovat budoucí události.

To má dvě velké nevýhody:

  1. Vaše databáze obsahuje údaje za celý rok. Pokud však přidávání dat za celý rok zničí váš výkon, váš systém je pravděpodobně nedostatečný. (Zdá se, že je vyžadováno, aby aplikace kalendáře byla schopna zpracovat data za mnoho let.)
  2. Na konci horizontu událostí je třeba vygenerovat budoucí data pro opakující se události.

Výhody (IMO), které převažují nad nevýhodami:

  1. Snazší matematika při zobrazení kalendáře. Pokud použijete Timovu metodu výše, pokud uživatel načte 18. prosince 2011, jak spočítáte, které opakující se události by měly být umístěny v daný den? Budete nuceni procházet KAŽDOU opakující se událost pokaždé, když zobrazíte datum. Kompromisem je nevýhoda č. 1, což je podle mě lepší řešení, než kdybyste museli tyto výpočty opakovat.
  2. Můžete upravit konkrétní výskyty události. Jak byste to podle Timovy metody udělali, kdyby se schůzka uskutečnila o svátku a uživatel ji změnil na předchozí den? Pomocí zde popsané metody jednoho záznamu na událost můžete upravit tento záznam pro událost a snadno přesouvat jednotlivé výskyty v kalendáři.


  1. Může cizí klíč odkazovat na nejedinečný index?

  2. Spravujte MySQL pomocí phpMyAdmin na Ubuntu 10.10 (Maverick)

  3. Vyberte informace z poslední položky a připojte se k celkové částce

  4. Kontrola NULL u kolekce v dotazech JPQL?