Da das Projekt auf SQL-Datenbanken aufsetzt, finden sich hier die SQL-Befehle um die Datenbank einzurichten. Das Erstellen der Datenbank selbst ist nicht standardisiert und hängt von der verwendeten Datenbank ab. Unter MySQL sind die folgenden Befehle (unter Kenntnis des richtigen Passwortes) einzugeben:
> mysqladmin --user=root --password="password" create sim3d > mysql --user=root --password="password" < create_user.sql > mysql --user=root --password="password" < create_db.sql
Die Datei "create_db.sql" findet sich im Verzeichnis "Dokumentation". Sie enthält die entsprechenden Befehle um die Datenbank (Datenbank "franklin", nach dem berühmten Franklin-Gebäude, dem Heim aller Informatiker an der TU-Berlin) einzurichten. Die Datei "create_user.sql" erzeugt einen Standardbenutzer ("frank" mit Passwort "frank"). Hierbei ist zu beachten, daß diese Datei nur mit MySQL-Datenbanken funktioniert, da jede Datenbank ihr eigenes Sicherheitskonzept implementiert. Der "Standardbenutzer" ist natürlich eine Sicherheitslücke das mit dem in Kapitel 3 erläuterten Sicherheitskonzept behoben wird.
Die folgenden Befehle zum Erstellen der Datenbank stammen aus der Datei "create_db.sql":
USE franklin;
CREATE TABLE Room
(
ID int PRIMARY KEY,
Name VARCHAR(20),
origin_x double,
origin_y double,
origin_z double,
height double,
Floor_texID int,
Ceil_texID int,
int_inf blob
);
CREATE TABLE Wall
(
ID int PRIMARY KEY,
Name VARCHAR(20),
RoomID int,
p1_x double,
p1_y double,
p2_x double,
p2_y double,
color int,
TextureID int,
int_inf blob
);
CREATE TABLE Break_Through
(
ID int PRIMARY KEY,
Name VARCHAR(20),
WallID int,
PassageID int,
rel_start double,
rel_end double,
height1 double,
height2 double,
int_inf blob
);
CREATE TABLE Texture
(
ID int PRIMARY KEY,
Name VARCHAR(20),
width double,
height double,
filename VARCHAR(20),
data_pix blob,
int_inf blob
);
CREATE TABLE Passage
(
ID int PRIMARY KEY,
Name VARCHAR(20),
RoomID1 int,
RoomID2 int,
DoorFrameID int,
DoorWingID int,
int_inf blob
);
CREATE TABLE Object3D
(
ID int PRIMARY KEY,
Name VARCHAR(20),
Type VARCHAR(20),
p_x double,
p_y double,
p_z double,
rot_x double,
rot_y double,
rot_z double,
TextureID int,
color int,
RoomID int,
GeomID int,
InfoID int,
int_inf blob
);
CREATE TABLE Geometry3D
(
ID int PRIMARY KEY,
Name VARCHAR(20),
Orientation VARCHAR(20),
center_x double,
center_y double,
center_z double,
data_3d blob,
int_inf blob
);
CREATE TABLE Information
(
ID int PRIMARY KEY,
Name VARCHAR(25),
url VARCHAR(50),
email VARCHAR(50),
int_inf blob
);
CREATE TABLE user
(
UID int,
name char(30)
);
CREATE TABLE gruppe
(
GID int,
name char(30)
);
CREATE TABLE raum
(
RID int,
name char(30)
);
CREATE TABLE groupmember
(
UID int,
GID int
);
CREATE TABLE userpermission
(
UID int,
RID int,
r enum("0","1"),
w enum("0","1"),
x enum("0","1")
);
CREATE TABLE grouppermission
(
GID int,
RID int,
r enum("0","1"),
w enum("0","1"),
x enum("0","1")
);
Das "eigentliche" Bearbeitungswerkzeug ist der graphische Editor der Editorgruppe des Projektes. Die Datenbankabstraktion die wir zum Projekt beigetragen haben ist in den vorherigen Kapiteln und in der JavaDoc-Dokumentation eingehend beschrieben.
Zur Erzeugung der Testdatenbank haben wir vor allem das zu MySQL gehörende Frontend "xmysql" benutzt. Es bietet eine allgemeine Oberfläche um MySQL-Datenbanken abzufragen und abzuändern.
Allerdings kann man über die Oberfläche keine Dateien (z.B VRML- oder Texturdateien) abspeichern. Dazu diente ein kleines Kommandozeilenprogramm, das auch im Verzeichnis src/sim3d/db/ zu finden ist:
StoreFileDb "table" "column" "id" "file"