| package DB; | |
| abstract class NamedElement { | |
| attr String name; | |
| } | |
| class Database { | |
| val DatabaseElement[*]#database contents; | |
| } | |
| abstract class DatabaseElement extends NamedElement { | |
| ref Database#contents database; | |
| } | |
| class Table extends DatabaseElement { | |
| val Column[*]#table columns; | |
| ref Column[*] primaryKeys; | |
| } | |
| class Column extends DatabaseElement { | |
| ref Table#columns table; | |
| attr String type; | |
| } | |
| class ForeignKey extends DatabaseElement { | |
| ref Column parent; | |
| ref Column child; | |
| } |