snap-databases
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:Some research about database types for snapframework.com
Uebersicht ueber Haskell Datentypen
===================================

Hier mal eine grobe Uebersicht ueber Record-Datentypen in Haskell. Diese ist
nicht vollstaendig, allerdings ist eine komplette Uebersicht ueber alle
Datentypen in Haskell doch recht umfangreich, da das Typsystem in Haskell eine
eigene Programmiersprache darstellt (ja, selbst Typen habe eigene Typen).

Haskell ist streng statisch getypt, d.h. jeder Wert hat zur Uebersetzungszeit
des Programmes einen genau festgelegten Typ. Dieser muss im Programm jedoch
nicht explizit angegeben werden (wie zum Beispiel in Java), sondern kann von
einem Inferenzsystem *ausgerechnet* werden.

In Haskell gibt es sowohl primitive Datentypen (Integer, String, etc.), aber
auch komplexe Datentype (Records) und algebraische Datentypen, Listen spielen
in Haskell eine zentrale Rolle.


Szenario
--------

Ein Modell des Anwendungsszenarios, (noch) nicht UML konform, die Pfeile
koennen hier jedoch als 1:n Beziehungen interpretiert werden (z.B. ein Tutor
hat viele Aufgaben, eine Aufgabe ist von einem Tutor erstellt worden). n:m
Beziehungen (z.B. zwischen Student und Gruppe) sind dabei aufgeloest worden.

![ERD](https://github.com/J-Hannes/snap-databases/blob/master/DataModel.png?raw=true)


Haskell Datentypen
------------------

Die Entitaeten koennten dann zum Beispiel so in Haskell modelliert werden
(hier mit Attributen).

```haskell
data User = User
  { firstname :: String
  , lastname  :: String
  , email     :: String
  , school    :: School
  , authUser  :: AuthUser
  }

data School = HtwkLeipzig

data Tutor = Tutor
  { user    :: User
  , courses :: [Course]
  , groups  :: [Group]
  , tasks   :: [Task]
  }

------------------------------------------------------------------------------
data Course = Course
  , coursename  :: String
  , semester    :: Semester
  , enrollTime  :: TimeFrame
  , assignment  :: Maybe Rational
  , assignments :: [Assignment]
  } 

data Semester = SS12

------------------------------------------------------------------------------
data Assignment = Assignment
  { status            :: Status
  , solutionsAccepted :: TimeFrame
  }

data Status = Mandatory | Optional

------------------------------------------------------------------------------
data Task = Task
  { taskname    :: String
  , scoring     :: Scoring
  , tag         :: String
  , config      :: String
  , signature   :: String
  , assignments :: [Assignment]
  }

-- etc.

```

Mehr Informationen zum Weiterlesen gibt es zum Beispiel
[hier](http://learnyouahaskell.com/making-our-own-types-and-typeclasses) (sehr
gut verstaendliche Referenz im Uebrigen).


Interpretation
--------------

Vielleicht koennten man diese Datenstrukturen auch mit Records in der JSON
vergleichen. Dann wuerde ein Wert, der einem bestimmten Typ entspricht, ein
Objekt mit genau festgelegtem *Bauplan* (also Anzahl und Art der Attribute)
entsprechen.

```javascript
var authUsers = [
  {
    'userId': 1,
    'username':  'test',
    'password':  'pass',
    'lastLogin': '2010-09-28 13:45:32 GMT',
    // ...
  },
  // more authUsers
];

var users = [
  {
    'firstname': 'Max',
    'lastname':  'Muster',
    'email':     'max.muster@email.com',
    'school':    schools[0],
    'authUser':  XXX
  },
  // more users
];

var schools = ['HTWK Leipzig', /* more schools */];

var tutors = [
  {
    'user':    users[0],
    'courses': [courses[1], courses[2]],
    'groups':  [groups[0],  groups[4], groups[5]],
    'tasks':   [tasks[1],   tasks[2],  /* ... */]
  },
  // more tutors 
];

var students = [
  {
    'user': [users[3]],
    'solutions': [solutions[13], solutions[14],
    'enrollments': [enrollments[4], enrollments[43]]]
  },
  // more students
];
```

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。