diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java
index 6c6dbe7c05c00ceb4b4f1b4e46e4963b9b58fb13..7a18019dc541b91469d221fd95e6088a52823b3d 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java
@@ -1,14 +1,12 @@
 package at.tuwien.api.container;
 
-import at.tuwien.api.database.DatabaseBriefDto;
 import at.tuwien.api.user.UserBriefDto;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import lombok.*;
 import lombok.extern.jackson.Jacksonized;
 
 import java.time.Instant;
@@ -45,9 +43,6 @@ public class ContainerBriefDto {
     @Schema(example = "true")
     private Boolean running;
 
-    @org.springframework.data.annotation.Transient
-    private DatabaseBriefDto database;
-
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
     private Instant created;
 }
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerChangeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerChangeDto.java
deleted file mode 100644
index 2559e8c65555789af6bc260f6b050c9fb6e6521d..0000000000000000000000000000000000000000
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerChangeDto.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package at.tuwien.api.container;
-
-import io.swagger.v3.oas.annotations.Parameter;
-import lombok.*;
-
-import jakarta.validation.constraints.NotNull;
-import lombok.extern.jackson.Jacksonized;
-
-@Getter
-@Setter
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@Jacksonized
-@ToString
-public class ContainerChangeDto {
-
-    @NotNull
-    @Parameter(required = true, example = "start")
-    private ContainerActionTypeDto action;
-
-}
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerCreateRequestDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerCreateRequestDto.java
index 50159cb0e148b477339d1538162020b90d309248..01aae6bbbb7218557b25d927240259295362f45a 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerCreateRequestDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerCreateRequestDto.java
@@ -1,9 +1,8 @@
 package at.tuwien.api.container;
 
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
 import jakarta.validation.constraints.NotBlank;
+import lombok.*;
 import lombok.extern.jackson.Jacksonized;
 
 @Getter
@@ -20,11 +19,21 @@ public class ContainerCreateRequestDto {
     private String name;
 
     @NotBlank
-    @Schema(example = "mariadb")
-    private String repository;
+    @Schema(description = "Image ID")
+    private Long imageId;
 
     @NotBlank
-    @Schema(example = "10.5")
-    private String tag;
+    @Schema(description = "Hostname of container")
+    private String host;
+
+    @Schema(description = "Port of container")
+    private Integer port;
 
+    @NotBlank
+    @Schema(description = "Username of privileged user", example = "root")
+    private String privilegedUsername;
+
+    @NotBlank
+    @Schema(description = "Password of privileged user")
+    private String privilegedPassword;
 }
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java
index c3a152785fa9b9f80933f2bfdfb06f133786bbce..d58ac3ee738bca41f1dc812e865427d3fd526506 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java
@@ -1,15 +1,13 @@
 package at.tuwien.api.container;
 
 import at.tuwien.api.container.image.ImageBriefDto;
-import at.tuwien.api.database.DatabaseDto;
 import at.tuwien.api.user.UserBriefDto;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import lombok.*;
 import lombok.extern.jackson.Jacksonized;
 
 import java.time.Instant;
@@ -26,10 +24,6 @@ public class ContainerDto {
     @NotNull
     private Long id;
 
-    @NotNull
-    @Schema(example = "f829dd8a884182d0da846f365dee1221fd16610a14c81b8f9f295ff162749e50")
-    private String hash;
-
     @NotBlank
     @Schema(example = "Air Quality")
     private String name;
@@ -39,24 +33,13 @@ public class ContainerDto {
     @Schema(example = "air-quality")
     private String internalName;
 
-    @Schema(example = "running")
-    private ContainerStateDto state;
-
-    @Schema
-    @ToString.Exclude
-    private DatabaseDto database;
-
-    @JsonProperty("ip_address")
-    private String ipAddress;
+    @NotBlank
+    private String host;
 
-    @NotNull
-    @Schema(example = "true")
-    private Boolean running;
+    private Integer port;
 
     private ImageBriefDto image;
 
-    private Integer port;
-
     private UserBriefDto owner;
 
     @NotNull
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerStateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerStateDto.java
deleted file mode 100644
index faf2c5bcf1e9efc58cdcfb2cb76fbf89a6bb31fa..0000000000000000000000000000000000000000
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerStateDto.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package at.tuwien.api.container;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Getter;
-import lombok.ToString;
-
-@Getter
-public enum ContainerStateDto {
-
-    @JsonProperty("created")
-    CREATED("created"),
-
-    @JsonProperty("restarting")
-    RESTARTING("restarting"),
-
-    @JsonProperty("running")
-    RUNNING("running"),
-
-    @JsonProperty("paused")
-    PAUSED("paused"),
-
-    @JsonProperty("exited")
-    EXITED("exited"),
-
-    @JsonProperty("dead")
-    DEAD("dead");
-
-    private String name;
-
-    ContainerStateDto(String name) {
-        this.name = name;
-    }
-
-    @Override
-    public String toString() {
-        return this.name;
-    }
-}
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java
index d982c237368dd138223913ea7db1295401941e70..4d404be60bccfc0f22beb4694ddffbfdd298e298 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java
@@ -1,10 +1,9 @@
 package at.tuwien.api.container.image;
 
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import lombok.*;
 import lombok.extern.jackson.Jacksonized;
 
 @Getter
@@ -19,16 +18,12 @@ public class ImageBriefDto {
     @NotNull
     private Long id;
 
-    @NotBlank
-    @Schema(example = "docker.io/library")
-    private String registry;
-
     @NotBlank
     @Schema(example = "mariadb")
-    private String repository;
+    private String name;
 
     @NotBlank
     @Schema(example = "10.5")
-    private String tag;
+    private String version;
 
 }
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java
index dc19e4e0e22f3683dcec0e0f5f3308df60ec1fd8..520449d1de7bfb8d92f33f15763c13813e6c935b 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java
@@ -2,15 +2,12 @@ package at.tuwien.api.container.image;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
 import jakarta.validation.constraints.Max;
 import jakarta.validation.constraints.Min;
 import jakarta.validation.constraints.NotBlank;
+import lombok.*;
 import lombok.extern.jackson.Jacksonized;
 
-import java.util.List;
-
 @Getter
 @Setter
 @Builder
@@ -29,8 +26,6 @@ public class ImageChangeDto {
     @Schema(example = "5432")
     private Integer defaultPort;
 
-    private List<ImageEnvItemDto> environment;
-
     @NotBlank
     @JsonProperty("driver_class")
     @Schema(example = "org.postgresql.Driver")
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java
index 64676aa01b9d3cdf42446f549950b10ab9ea7261..2031ee15aa6ed44d60682315604a726fe7af03c6 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java
@@ -5,14 +5,11 @@ import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.Max;
 import jakarta.validation.constraints.Min;
-import lombok.*;
-
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import lombok.*;
 import lombok.extern.jackson.Jacksonized;
 
-import java.util.List;
-
 @Getter
 @Setter
 @Builder
@@ -28,11 +25,11 @@ public class ImageCreateDto {
 
     @NotBlank
     @Schema(example = "mariadb")
-    private String repository;
+    private String name;
 
     @NotBlank
     @Parameter(example = "10.5")
-    private String tag;
+    private String version;
 
     @NotBlank
     @JsonProperty("driver_class")
@@ -55,6 +52,4 @@ public class ImageCreateDto {
     @Parameter(required = true, example = "3006")
     private Integer defaultPort;
 
-    private List<ImageEnvItemDto> environment;
-
 }
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java
index 8dfb917afd39c20e906587dc00fb5d3155d57537..473e038f8d4c4aa6641152dbe0cfd90e0f9656b4 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java
@@ -1,17 +1,12 @@
 package at.tuwien.api.container.image;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import lombok.*;
 import lombok.extern.jackson.Jacksonized;
 
-import java.math.BigInteger;
-import java.time.Instant;
 import java.util.List;
 
 @Getter
@@ -32,11 +27,11 @@ public class ImageDto {
 
     @NotBlank
     @Schema(example = "mariadb")
-    private String repository;
+    private String name;
 
     @NotBlank
     @Schema(example = "10.5")
-    private String tag;
+    private String version;
 
     @NotBlank
     @JsonProperty("driver_class")
@@ -59,25 +54,9 @@ public class ImageDto {
     @org.springframework.data.annotation.Transient
     private String jdbcMethod;
 
-    @Schema(example = "sha256:c5ec7353d87dfc35067e7bffeb25d6a0d52dad41e8b7357213e3b12d6e7ff78e")
-    private String hash;
-
-    @Schema(example = "2021-03-12T15:26:21.678396092Z")
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
-    private Instant compiled;
-
-    @Schema(example = "314295447")
-    private BigInteger size;
-
     @NotNull
     @JsonProperty("default_port")
     @Schema(example = "3306")
     private Integer defaultPort;
 
-    @NotNull
-    @JsonIgnore
-    @ToString.Exclude
-    @org.springframework.data.annotation.Transient
-    private List<ImageEnvItemDto> environment;
-
 }
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageEnvItemDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageEnvItemDto.java
deleted file mode 100644
index ce7115f5635847a8917540d88db87429c25ec42a..0000000000000000000000000000000000000000
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageEnvItemDto.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package at.tuwien.api.container.image;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import lombok.extern.jackson.Jacksonized;
-
-@Getter
-@Setter
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@Jacksonized
-@ToString
-public class ImageEnvItemDto {
-
-    @NotNull
-    private Long iid;
-
-    @NotBlank
-    @Schema(example = "MARIADB_ROOT_PASSWORD")
-    private String key;
-
-    @NotBlank
-    @JsonIgnore
-    @ToString.Exclude
-    @Schema(example = "mariadb")
-    private String value;
-
-    @NotNull
-    @Schema(example = "PRIVILEGED_PASSWORD")
-    private ImageEnvItemTypeDto type;
-
-}
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageEnvItemTypeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageEnvItemTypeDto.java
deleted file mode 100644
index 4141175ee6b3bf35b224fd9490c60577c13fb980..0000000000000000000000000000000000000000
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageEnvItemTypeDto.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package at.tuwien.api.container.image;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public enum ImageEnvItemTypeDto {
-
-    @JsonProperty("username")
-    USERNAME("username"),
-
-    @JsonProperty("password")
-    PASSWORD("password"),
-
-    @JsonProperty("privileged_username")
-    PRIVILEGED_USERNAME("privileged_username"),
-
-    @JsonProperty("privileged_password")
-    PRIVILEGED_PASSWORD("privileged_password");
-
-    private String name;
-
-    ImageEnvItemTypeDto(String name) {
-        this.name = name;
-    }
-
-    @Override
-    public String toString() {
-        return this.name;
-    }
-}
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java
index bf2161981da4774757e07ea4f04c307895ab62ee..77bbf4183dd55ae992e2b8a5ac08d16a809bab1f 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java
@@ -1,15 +1,15 @@
 package at.tuwien.api.database;
 
 import at.tuwien.api.container.ContainerBriefDto;
+import at.tuwien.api.container.image.ImageBriefDto;
 import at.tuwien.api.identifier.IdentifierBriefDto;
 import at.tuwien.api.user.UserBriefDto;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import lombok.*;
 import lombok.extern.jackson.Jacksonized;
 
 import java.time.Instant;
@@ -55,4 +55,7 @@ public class DatabaseBriefDto {
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
     private Instant created;
 
+    @NotNull
+    private ImageBriefDto image;
+
 }
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseCreateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseCreateDto.java
index 039e1070f7a4f8c7147218b20432576276b0147b..08102153a46b31ea77e77b759f61126f366264f1 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseCreateDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseCreateDto.java
@@ -2,10 +2,9 @@ package at.tuwien.api.database;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import lombok.*;
 import lombok.extern.jackson.Jacksonized;
 
 @Getter
@@ -17,6 +16,11 @@ import lombok.extern.jackson.Jacksonized;
 @ToString
 public class DatabaseCreateDto {
 
+    @NotNull(message = "Container id is required")
+    @JsonProperty("container_id")
+    @Schema(example = "1")
+    private Long cid;
+
     @NotBlank(message = "database name is required")
     @Schema(example = "Air Quality")
     private String name;
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java
index 0717ed8c486efa75b443a0a8c0f68b0937a773f8..1d5f19abc49c3efb010cd6cd5f54974b1540a18c 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java
@@ -8,11 +8,10 @@ import at.tuwien.api.user.UserBriefDto;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import lombok.extern.jackson.Jacksonized;
-
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import lombok.*;
+import lombok.extern.jackson.Jacksonized;
 import org.springframework.data.elasticsearch.annotations.Document;
 import org.springframework.data.elasticsearch.annotations.Field;
 
@@ -65,7 +64,6 @@ public class DatabaseDto {
     @org.springframework.data.annotation.Transient
     private ImageDto image;
 
-    @org.springframework.data.annotation.Transient
     private ContainerDto container;
 
     private List<DatabaseAccessDto> accesses;
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java
index 8df51261bd297a7e113fc6f53f05b1ed4d4b867a..ac0763f9d3b930d7c3d21c57872b5970303c9615 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java
@@ -6,11 +6,10 @@ import at.tuwien.api.user.UserBriefDto;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import lombok.extern.jackson.Jacksonized;
-
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import lombok.*;
+import lombok.extern.jackson.Jacksonized;
 import org.springframework.data.elasticsearch.annotations.Document;
 import org.springframework.data.elasticsearch.annotations.Field;
 
@@ -27,11 +26,6 @@ import java.util.List;
 @Document(indexName = "table")
 public class TableDto {
 
-    @NotNull
-    @Field(name = "container_id")
-    @JsonProperty("container_id")
-    private Long containerId;
-
     @NotNull
     @Field(name = "database_id")
     @JsonProperty("database_id")
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java
index 6f3b30b04d5c25c82955d60a6a81faee1aaa2b86..436c7aeeeb69631b6e8157bc1ae9437a14494b54 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java
@@ -6,11 +6,10 @@ import at.tuwien.api.database.table.columns.concepts.UnitDto;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import lombok.extern.jackson.Jacksonized;
-
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import lombok.*;
+import lombok.extern.jackson.Jacksonized;
 import org.springframework.data.elasticsearch.annotations.Document;
 import org.springframework.data.elasticsearch.annotations.Field;
 
@@ -24,11 +23,6 @@ import org.springframework.data.elasticsearch.annotations.Field;
 @Document(indexName = "column")
 public class ColumnDto {
 
-    @NotNull
-    @Field(name = "container_id")
-    @JsonProperty("container_id")
-    private Long containerId;
-
     @NotNull
     @Field(name = "database_id")
     @JsonProperty("database_id")
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java
index 7538b8d9dd79d6d9e7637f6d059a2409e3651ea2..b7bd2134b704baf80ed069dc2e8364150d4b1c77 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java
@@ -4,10 +4,9 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import lombok.*;
 import lombok.extern.jackson.Jacksonized;
 
 import java.time.Instant;
@@ -25,11 +24,6 @@ public class IdentifierBriefDto {
     @NotNull
     private Long id;
 
-    @NotNull
-    @JsonProperty("container_id")
-    @Schema(name = "container id", example = "1")
-    private Long containerId;
-
     @NotNull
     @JsonProperty("database_id")
     @Schema(name = "database id", example = "1")
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierCreateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierCreateDto.java
index abb5b182638c1e878e404097080232b6bb893204..61ce7f0edea55249de31e4ba4d6fac3c59a14c89 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierCreateDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierCreateDto.java
@@ -4,11 +4,10 @@ import at.tuwien.api.database.LanguageTypeDto;
 import at.tuwien.api.database.LicenseDto;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
 import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
 import lombok.extern.jackson.Jacksonized;
 
 import java.util.List;
@@ -22,9 +21,6 @@ import java.util.List;
 @ToString
 public class IdentifierCreateDto {
 
-    @NotNull
-    private Long cid;
-
     @NotNull
     private Long dbid;
 
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java
index 632ee66fc8429a6d4d4f16e9e2a2a15c060993f3..c5a11f62bde9605976ccebe8f897f4aebc4530bf 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java
@@ -7,11 +7,10 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import lombok.extern.jackson.Jacksonized;
-
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import lombok.*;
+import lombok.extern.jackson.Jacksonized;
 import org.springframework.data.elasticsearch.annotations.Document;
 
 import java.time.Instant;
@@ -29,11 +28,6 @@ public class IdentifierDto {
 
     private Long id;
 
-    @NotNull
-    @JsonProperty("container_id")
-    @Schema(name = "container id", example = "1")
-    private Long containerId;
-
     @NotNull
     @JsonProperty("database_id")
     @Schema(name = "database id", example = "1")
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierUpdateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierUpdateDto.java
index ab081e42958d9e23e33ed1cf6e61c3397230bc3b..32eec83917d149ba7a54d4aef66ec1ab4e9f2a88 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierUpdateDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierUpdateDto.java
@@ -4,11 +4,10 @@ import at.tuwien.api.database.LanguageTypeDto;
 import at.tuwien.api.database.LicenseDto;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
 import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
 import lombok.extern.jackson.Jacksonized;
 
 import java.util.List;
@@ -22,9 +21,6 @@ import java.util.List;
 @ToString
 public class IdentifierUpdateDto {
 
-    @NotNull
-    private Long cid;
-
     @NotNull
     private Long dbid;
 
diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java
index 1f7921291b14c867cd4cdaff6cb02f0547b5c390..e5666429cbfbebf2149a405c8992a4c50109e686 100644
--- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java
+++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java
@@ -2,17 +2,15 @@ package at.tuwien.entities.container;
 
 import at.tuwien.entities.container.image.ContainerImage;
 import at.tuwien.entities.database.Database;
-import at.tuwien.entities.user.User;
 import jakarta.persistence.*;
 import lombok.*;
 import org.hibernate.annotations.GenericGenerator;
-import org.hibernate.annotations.JdbcTypeCode;
 import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.annotation.LastModifiedDate;
 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
 
 import java.time.Instant;
-import java.util.UUID;
+import java.util.List;
 
 @Data
 @Entity
@@ -32,61 +30,36 @@ public class Container {
     @Column(updatable = false, nullable = false)
     private Long id;
 
-    @ToString.Exclude
-    @JdbcTypeCode(java.sql.Types.VARCHAR)
-    @Column(name = "createdBy", nullable = false, columnDefinition = "VARCHAR(36)")
-    private UUID createdBy;
-
-    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
-    @JoinColumns({
-            @JoinColumn(name = "createdBy", referencedColumnName = "ID", insertable = false, updatable = false)
-    })
-    private User creator;
-
-    @ToString.Exclude
-    @JdbcTypeCode(java.sql.Types.VARCHAR)
-    @Column(name = "ownedBy", nullable = false, columnDefinition = "VARCHAR(36)")
-    private UUID ownedBy;
-
-    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
-    @JoinColumns({
-            @JoinColumn(name = "ownedBy", referencedColumnName = "ID", insertable = false, updatable = false)
-    })
-    private User owner;
-
     @Column(nullable = false)
     private String name;
 
     @Column(nullable = false)
     private String internalName;
 
-    @Column(nullable = false)
-    private String hash;
-
     @Column(name = "image_id", nullable = false, updatable = false)
     private Long imageId;
 
+    @Column(nullable = false)
+    private String host;
+
     @Column
     private Integer port;
 
     @ToString.Exclude
     @org.springframework.data.annotation.Transient
-    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
     @JoinColumns({
-            @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false)
+            @JoinColumn(name = "cid", referencedColumnName = "id", insertable = false, updatable = false)
     })
-    private Database database;
+    private List<Database> databases;
 
     @org.springframework.data.annotation.Transient
-    @ManyToOne(fetch = FetchType.LAZY)
+    @ManyToOne
     @JoinColumns({
             @JoinColumn(name = "image_id", referencedColumnName = "id", insertable = false, updatable = false)
     })
     private ContainerImage image;
 
-    @Column
-    private String ipAddress;
-
     @CreatedDate
     @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP")
     private Instant created;
@@ -95,4 +68,10 @@ public class Container {
     @Column(columnDefinition = "TIMESTAMP")
     private Instant lastModified;
 
+    @Column
+    private String privilegedUsername;
+
+    @Column
+    private String privilegedPassword;
+
 }
diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
index 440ef8627d18d2033dda9a5683f9602b4dae8169..de4d3ed01e25b4fc3282eb2830d32d705643eaec 100644
--- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
+++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
@@ -19,7 +19,7 @@ import java.util.List;
 @NoArgsConstructor
 @EntityListeners(AuditingEntityListener.class)
 @EqualsAndHashCode(onlyExplicitlyIncluded = true)
-@Table(name = "mdb_images", uniqueConstraints = @UniqueConstraint(columnNames = {"repository", "tag"}))
+@Table(name = "mdb_images", uniqueConstraints = @UniqueConstraint(columnNames = {"name", "version"}))
 public class ContainerImage {
 
     @Id
@@ -30,13 +30,10 @@ public class ContainerImage {
     public Long id;
 
     @Column(nullable = false)
-    private String repository;
-
-    @Column(nullable = false, columnDefinition = "TEXT default 'docker.io/library'")
-    private String registry;
+    private String name;
 
     @Column(nullable = false)
-    private String tag;
+    private String version;
 
     @Column(nullable = false)
     private String driverClass;
@@ -47,23 +44,9 @@ public class ContainerImage {
     @Column(nullable = false)
     private String jdbcMethod;
 
-    @Column
-    private String hash;
-
-    @Column(columnDefinition = "TIMESTAMP")
-    private Instant compiled;
-
-    @Column
-    private Long size;
-
     @Column(nullable = false)
     private Integer defaultPort;
 
-    @ToString.Exclude
-    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
-    @JoinColumn(name = "iid", insertable = false, updatable = false)
-    private List<ContainerImageEnvironmentItem> environment;
-
     @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "image")
     private List<ContainerImageDate> dateFormats;
 
diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java
deleted file mode 100644
index 9b4e64a526c2166cb74ad3c9befa6786962b576f..0000000000000000000000000000000000000000
--- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package at.tuwien.entities.container.image;
-
-import lombok.*;
-import org.hibernate.annotations.GenericGenerator;
-import org.springframework.data.annotation.CreatedDate;
-import org.springframework.data.annotation.LastModifiedDate;
-import org.springframework.data.jpa.domain.support.AuditingEntityListener;
-
-import jakarta.persistence.*;;
-import java.time.Instant;
-
-@Data
-@Entity
-@Builder
-@ToString
-@AllArgsConstructor
-@NoArgsConstructor
-@IdClass(ContainerImageEnvironmentItemKey.class)
-@EntityListeners(AuditingEntityListener.class)
-@EqualsAndHashCode(onlyExplicitlyIncluded = true)
-@Table(name = "mdb_images_environment_item")
-public class ContainerImageEnvironmentItem {
-
-    @Id
-    @EqualsAndHashCode.Include
-    @GeneratedValue(generator = "environments-sequence")
-    @GenericGenerator(name = "environments-sequence", strategy = "increment")
-    @Column(updatable = false, nullable = false)
-    public Long id;
-
-    @Id
-    @EqualsAndHashCode.Include
-    public Long iid;
-
-    @Column(nullable = false, columnDefinition = "VARCHAR(255)")
-    private String key;
-
-    @Column(nullable = false, columnDefinition = "VARCHAR(255)")
-    private String value;
-
-    @Column(nullable = false, name = "etype", columnDefinition = "enum('USERNAME', 'PASSWORD', 'PRIVILEGED_USERNAME', 'PRIVILEGED_PASSWORD')")
-    @Enumerated(EnumType.STRING)
-    private ContainerImageEnvironmentItemType type;
-
-    @ToString.Exclude
-    @org.springframework.data.annotation.Transient
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumns({
-            @JoinColumn(name = "iid", referencedColumnName = "id", insertable = false, updatable = false)
-    })
-    private ContainerImage image;
-
-    @CreatedDate
-    @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP")
-    private Instant created;
-
-    @LastModifiedDate
-    @Column(columnDefinition = "TIMESTAMP")
-    private Instant lastModified;
-
-}
-
diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItemKey.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItemKey.java
deleted file mode 100644
index 969a8491e78e53cb34f40cdc2954d0bb6577929e..0000000000000000000000000000000000000000
--- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItemKey.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package at.tuwien.entities.container.image;
-
-import lombok.EqualsAndHashCode;
-
-import java.io.Serializable;
-
-@EqualsAndHashCode
-public class ContainerImageEnvironmentItemKey implements Serializable {
-
-    private Long id;
-
-    private Long iid;
-
-}
diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItemType.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItemType.java
deleted file mode 100644
index 2136ba805954b1bb65b14f6dc7f6f75595eeb42b..0000000000000000000000000000000000000000
--- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItemType.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package at.tuwien.entities.container.image;
-
-public enum ContainerImageEnvironmentItemType {
-    USERNAME,
-    PASSWORD,
-    PRIVILEGED_USERNAME,
-    PRIVILEGED_PASSWORD;
-}
diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java
index e987416bc7c1e06aeaa54f2778ac58fb7f1e7317..2b95075c9dd5a0c90da3fe6745ca2fa6d43660fd 100644
--- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java
+++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java
@@ -4,20 +4,21 @@ import at.tuwien.entities.container.Container;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.entities.user.User;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.*;
 import lombok.*;
 import org.hibernate.annotations.*;
 import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.annotation.LastModifiedDate;
 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
 
-import jakarta.persistence.*;;
-import jakarta.persistence.CascadeType;
-import jakarta.persistence.Entity;
 import java.io.Serializable;
 import java.time.Instant;
 import java.util.List;
 import java.util.UUID;
 
+;
+
 @Data
 @Entity
 @Builder
@@ -26,12 +27,14 @@ import java.util.UUID;
 @NoArgsConstructor
 @EntityListeners(AuditingEntityListener.class)
 @jakarta.persistence.Table(name = "mdb_databases", uniqueConstraints = {
-        @UniqueConstraint(columnNames = {"id", "internalName"})
+        @UniqueConstraint(columnNames = {"cid", "internalName"})
 })
 public class Database implements Serializable {
 
     @Id
     @EqualsAndHashCode.Include
+    @GeneratedValue(generator = "databases-sequence")
+    @GenericGenerator(name = "databases-sequence", strategy = "increment")
     @Column(updatable = false, nullable = false)
     private Long id;
 
@@ -57,11 +60,14 @@ public class Database implements Serializable {
     })
     private User owner;
 
+    @Column(nullable = false)
+    private Long cid;
+
     @ToString.Exclude
     @org.springframework.data.annotation.Transient
-    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
+    @ManyToOne(cascade = CascadeType.PERSIST)
     @JoinColumns({
-            @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false)
+            @JoinColumn(name = "cid", referencedColumnName = "id", insertable = false, updatable = false)
     })
     private Container container;
 
diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java
index 80542a403f91f41509d498a4e50068bf761c642b..4119af3ccf241edf570bbeab53a0de5ec7d22686 100644
--- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java
+++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java
@@ -2,6 +2,7 @@ package at.tuwien.entities.database;
 
 import at.tuwien.entities.database.table.columns.TableColumn;
 import at.tuwien.entities.user.User;
+import jakarta.persistence.*;
 import lombok.*;
 import net.sf.jsqlparser.statement.select.FromItem;
 import org.hibernate.annotations.GenericGenerator;
@@ -10,12 +11,11 @@ import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.annotation.LastModifiedDate;
 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
 
-import jakarta.persistence.*;;
 import java.time.Instant;
 import java.util.List;
 import java.util.UUID;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+
+;
 
 @Data
 @Entity
@@ -41,10 +41,6 @@ public class View {
     @Column(updatable = false, nullable = false)
     private Long id;
 
-    @Id
-    @EqualsAndHashCode.Include
-    private Long vcid;
-
     @Id
     @EqualsAndHashCode.Include
     private Long vdbid;
@@ -100,7 +96,6 @@ public class View {
     @JoinTable(name = "mdb_view_columns",
             joinColumns = {
                     @JoinColumn(name = "vid", referencedColumnName = "id", insertable = false, updatable = false),
-                    @JoinColumn(name = "vcid", referencedColumnName = "vcid", insertable = false, updatable = false),
                     @JoinColumn(name = "vdbid", referencedColumnName = "vdbid", insertable = false, updatable = false)
             },
             inverseJoinColumns = {
diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/ViewKey.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/ViewKey.java
index 3a2d610051c0a10d42bba8363a16de067598356f..d23b539afab301bd47034cc9f66e94b8c7a0c12a 100644
--- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/ViewKey.java
+++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/ViewKey.java
@@ -9,7 +9,5 @@ public class ViewKey implements Serializable {
 
     private Long id;
 
-    private Long vcid;
-
     private Long vdbid;
 }
diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java
index 56a8b87a9df1f55180fbed30812fc6cfa499ba2b..8ba5d6faf522b40c17d727e950bb8964720d5854 100644
--- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java
+++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java
@@ -4,18 +4,20 @@ import at.tuwien.entities.database.Database;
 import at.tuwien.entities.database.LanguageType;
 import at.tuwien.entities.database.License;
 import at.tuwien.entities.user.User;
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotBlank;
 import lombok.*;
 import org.hibernate.annotations.GenericGenerator;
 import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.annotation.LastModifiedDate;
 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
 
-import jakarta.persistence.*;;
-import jakarta.validation.constraints.NotBlank;
 import java.io.Serializable;
 import java.time.Instant;
 import java.util.List;
 
+;
+
 @Data
 @Entity
 @Builder
@@ -24,7 +26,7 @@ import java.util.List;
 @NoArgsConstructor
 @EntityListeners(AuditingEntityListener.class)
 @jakarta.persistence.Table(name = "mdb_identifiers", uniqueConstraints = {
-        @UniqueConstraint(columnNames = {"qid", "cid", "dbid"})
+        @UniqueConstraint(columnNames = {"qid", "dbid"})
 })
 public class Identifier implements Serializable {
 
@@ -35,9 +37,6 @@ public class Identifier implements Serializable {
     @Column(updatable = false, nullable = false)
     private Long id;
 
-    @Column(name = "cid", nullable = false)
-    private Long containerId;
-
     @Column(name = "dbid", nullable = false)
     private Long databaseId;
 
diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java
index 551acd615d9afcee94f4940ef1a8f1da41518672..776006ea12208d2683445489f6b062d8065260c1 100644
--- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java
+++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java
@@ -1,18 +1,19 @@
 package at.tuwien.entities.user;
 
-import at.tuwien.entities.container.Container;
 import at.tuwien.entities.database.Database;
 import at.tuwien.entities.identifier.Identifier;
+import jakarta.persistence.*;
 import lombok.*;
 import org.hibernate.annotations.JdbcTypeCode;
 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
 import org.springframework.security.core.Authentication;
 
-import jakarta.persistence.*;;
 import java.security.Principal;
 import java.util.List;
 import java.util.UUID;
 
+;
+
 @Data
 @Entity
 @Builder
@@ -21,7 +22,7 @@ import java.util.UUID;
 @ToString
 @EntityListeners(AuditingEntityListener.class)
 @EqualsAndHashCode(onlyExplicitlyIncluded = true)
-@Table(name = "user_entity", uniqueConstraints = {
+@Table(name = "USER_ENTITY", uniqueConstraints = {
         @UniqueConstraint(columnNames = {"REALM_ID", "EMAIL"}),
         @UniqueConstraint(columnNames = {"REALM_ID", "USERNAME"})
 })
@@ -78,11 +79,6 @@ public class User {
     @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user")
     private List<Credential> credentials;
 
-    @Transient
-    @ToString.Exclude
-    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "owner")
-    private List<Container> containers;
-
     @Transient
     @ToString.Exclude
     @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "owner")
diff --git a/dbrepo-metadata-db/pom.xml b/dbrepo-metadata-db/pom.xml
index 0fb24fd6ea1b841a9337014f643f43a876247226..35b8b185da8a4c6895057a76eecde59f3d1b23db 100644
--- a/dbrepo-metadata-db/pom.xml
+++ b/dbrepo-metadata-db/pom.xml
@@ -27,7 +27,6 @@
         <java.version>17</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <docker.version>3.3.0</docker.version>
         <jsql-parser.version>4.6</jsql-parser.version>
         <jackson-datatype.version>2.15.0</jackson-datatype.version>
         <commons.version>2.11.0</commons.version>
@@ -87,23 +86,6 @@
             <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
             <version>${springdoc-openapi.version}</version>
         </dependency>
-        <!-- Docker -->
-        <dependency>
-            <groupId>com.github.docker-java</groupId>
-            <artifactId>docker-java</artifactId>
-            <version>${docker.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>javax.ws.rs</groupId>
-                    <artifactId>jsr311-api</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>com.github.docker-java</groupId>
-            <artifactId>docker-java-transport-httpclient5</artifactId>
-            <version>${docker.version}</version>
-        </dependency>
     </dependencies>
 
     <!-- build at.tuwien.gateway.config in ./rest-service/pom.xml -->
diff --git a/dbrepo-metadata-db/setup-schema.sql b/dbrepo-metadata-db/setup-schema.sql
index db145811a11093d65a2961ac508371bfead606eb..7cca2cb20586081c79afc2d61c8d76a2af656694 100644
--- a/dbrepo-metadata-db/setup-schema.sql
+++ b/dbrepo-metadata-db/setup-schema.sql
@@ -3,20 +3,16 @@ BEGIN;
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_images`
 (
     id            bigint                 NOT NULL AUTO_INCREMENT,
-    registry      text                   NOT NULL DEFAULT 'docker.io/library',
-    repository    character varying(255) NOT NULL,
-    tag           character varying(255) NOT NULL,
+    name          character varying(255) NOT NULL,
+    version       character varying(255) NOT NULL,
     default_port  integer                NOT NULL,
     dialect       character varying(255) NOT NULL,
     driver_class  character varying(255) NOT NULL,
     jdbc_method   character varying(255) NOT NULL,
-    compiled      timestamp,
-    hash          character varying(255),
-    size          bigint,
     created       timestamp              NOT NULL DEFAULT NOW(),
     last_modified timestamp,
     PRIMARY KEY (id),
-    UNIQUE (repository, tag)
+    UNIQUE (name, version)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_images_date`
@@ -35,34 +31,20 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_images_date`
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_containers`
 (
-    id            bigint                 NOT NULL AUTO_INCREMENT,
-    HASH          character varying(255) NOT NULL,
-    INTERNAL_NAME character varying(255) NOT NULL,
-    NAME          character varying(255) NOT NULL,
-    PORT          integer,
-    image_id      bigint                 NOT NULL,
-    ip_address    character varying(255),
-    created       timestamp              NOT NULL DEFAULT NOW(),
-    created_by    character varying(255) NOT NULL,
-    owned_by      character varying(255) NOT NULL,
+    id            bigint                       NOT NULL AUTO_INCREMENT,
+    INTERNAL_NAME character varying(255)       NOT NULL,
+    NAME          character varying(255)       NOT NULL,
+    HOST          character varying(255)       NOT NULL,
+    PORT          integer                      NOT NULL,
+    image_id      bigint                       NOT NULL,
+    created       timestamp                    NOT NULL DEFAULT NOW(),
     LAST_MODIFIED timestamp,
+    privileged_username character varying(255) NOT NULL,
+    privileged_password character varying(255) NOT NULL,
     PRIMARY KEY (id),
     FOREIGN KEY (image_id) REFERENCES mdb_images (id)
 ) WITH SYSTEM VERSIONING;
 
-CREATE TABLE IF NOT EXISTS `fda`.`mdb_images_environment_item`
-(
-    id            bigint                                                                      NOT NULL AUTO_INCREMENT,
-    `key`         character varying(255)                                                      NOT NULL,
-    value         character varying(255)                                                      NOT NULL,
-    etype         ENUM ('PRIVILEGED_USERNAME', 'PRIVILEGED_PASSWORD', 'USERNAME', 'PASSWORD') NOT NULL,
-    iid           bigint                                                                      NOT NULL,
-    created       timestamp                                                                   NOT NULL DEFAULT NOW(),
-    last_modified timestamp,
-    PRIMARY KEY (id, iid),
-    FOREIGN KEY (iid) REFERENCES mdb_images (id)
-) WITH SYSTEM VERSIONING;
-
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_data`
 (
     ID           bigint NOT NULL AUTO_INCREMENT,
@@ -85,6 +67,7 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_licenses`
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_databases`
 (
     id             bigint                 NOT NULL AUTO_INCREMENT,
+    cid            bigint                 NOT NULL,
     name           character varying(255) NOT NULL,
     internal_name  character varying(255) NOT NULL,
     exchange_name  character varying(255) NOT NULL,
@@ -97,7 +80,7 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_databases`
     created        timestamp              NOT NULL DEFAULT NOW(),
     last_modified  timestamp,
     PRIMARY KEY (id),
-    FOREIGN KEY (id) REFERENCES mdb_containers (id) /* currently we only support one-to-one */
+    FOREIGN KEY (cid) REFERENCES mdb_containers (id) /* currently we only support one-to-one */
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_databases_subjects`
@@ -319,7 +302,6 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_columns_units`
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_view`
 (
     id            bigint                 NOT NULL AUTO_INCREMENT,
-    vcid          bigint                 NOT NULL,
     vdbid         bigint                 NOT NULL,
     vName         VARCHAR(255)           NOT NULL,
     internal_name VARCHAR(255)           NOT NULL,
@@ -331,7 +313,7 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_view`
     created       timestamp              NOT NULL DEFAULT NOW(),
     last_modified timestamp,
     created_by    character varying(255) NOT NULL,
-    PRIMARY KEY (id, vcid, vdbid),
+    PRIMARY KEY (id, vdbid),
     FOREIGN KEY (vdbid) REFERENCES mdb_databases (id)
 ) WITH SYSTEM VERSIONING;
 
@@ -368,18 +350,16 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_view_columns`
     ctid     BIGINT  NOT NULL,
     cdbid    BIGINT  NOT NULL,
     vid      BIGINT  NOT NULL,
-    vcid     BIGINT  NOT NULL,
     vdbid    BIGINT  NOT NULL,
     position INTEGER NULL,
     PRIMARY KEY (id),
-    FOREIGN KEY (vid, vcid, vdbid) REFERENCES mdb_view (id, vcid, vdbid),
+    FOREIGN KEY (vid, vdbid) REFERENCES mdb_view (id, vdbid),
     FOREIGN KEY (cid, cdbid, ctid) REFERENCES mdb_columns (ID, cDBID, tID)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_identifiers`
 (
     id                bigint                    NOT NULL AUTO_INCREMENT,
-    cid               bigint                    NOT NULL,
     dbid              bigint                    NOT NULL,
     qid               bigint,
     title             VARCHAR(255)              NOT NULL,
@@ -403,9 +383,8 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_identifiers`
     created_by        character varying(255)    NOT NULL,
     last_modified     timestamp,
     PRIMARY KEY (id), /* must be a single id from persistent identifier concept */
-    FOREIGN KEY (cid) REFERENCES mdb_containers (id),
     FOREIGN KEY (dbid) REFERENCES mdb_databases (id),
-    UNIQUE (cid, dbid, qid)
+    UNIQUE (dbid, qid)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_related_identifiers`
@@ -488,15 +467,9 @@ VALUES ('MIT', 'https://opensource.org/licenses/MIT'),
        ('CC0-1.0', 'https://creativecommons.org/publicdomain/zero/1.0/legalcode'),
        ('CC-BY-4.0', 'https://creativecommons.org/licenses/by/4.0/legalcode');
 
-INSERT INTO `fda`.`mdb_images` (repository, tag, default_port, dialect, driver_class, jdbc_method)
+INSERT INTO `fda`.`mdb_images` (name, version, default_port, dialect, driver_class, jdbc_method)
 VALUES ('mariadb', '10.5', 3306, 'org.hibernate.dialect.MariaDBDialect', 'org.mariadb.jdbc.Driver', 'mariadb');
 
-INSERT INTO `fda`.`mdb_images_environment_item` (`key`, value, etype, iid)
-VALUES ('ROOT', 'root', 'PRIVILEGED_USERNAME', 1),
-       ('MARIADB_ROOT_PASSWORD', 'mariadb', 'PRIVILEGED_PASSWORD', 1),
-       ('MARIADB_USER', 'mariadb', 'USERNAME', 1),
-       ('MARIADB_PASSWORD', 'mariadb', 'PASSWORD', 1);
-
 INSERT INTO `fda`.`mdb_images_date` (iid, database_format, unix_format, example, has_time)
 VALUES (1, '%Y-%c-%d %H:%i:%S.%f', 'yyyy-MM-dd HH:mm:ss.SSSSSS', '2022-01-30 13:44:25.499', true),
        (1, '%Y-%c-%d %H:%i:%S', 'yyyy-MM-dd HH:mm:ss', '2022-01-30 13:44:25', true),
diff --git a/dbrepo-metadata-db/setup-schema_local.sql b/dbrepo-metadata-db/setup-schema_local.sql
new file mode 100644
index 0000000000000000000000000000000000000000..1dceaa96f7b53b1ae3d979e35c2bc7a1c633014b
--- /dev/null
+++ b/dbrepo-metadata-db/setup-schema_local.sql
@@ -0,0 +1,6 @@
+BEGIN;
+
+INSERT INTO `fda`.`mdb_containers` (name, internal_name, image_id, host, port, privileged_username, privileged_password)
+VALUES ('MariaDB 10.5', 'mariadb_10_5', 1, 'user-db', 3306, 'root', 'dbrepo');
+
+COMMIT;
diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/DockerConfig.java b/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/DockerConfig.java
deleted file mode 100644
index e642c44251f7da13e48e811e859f6aa0a20d2120..0000000000000000000000000000000000000000
--- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/DockerConfig.java
+++ /dev/null
@@ -1,216 +0,0 @@
-package at.tuwien.config;
-
-import at.tuwien.entities.container.Container;
-import at.tuwien.test.BaseTest;
-import com.github.dockerjava.api.DockerClient;
-import com.github.dockerjava.api.command.CreateContainerCmd;
-import com.github.dockerjava.api.command.CreateContainerResponse;
-import com.github.dockerjava.api.command.InspectContainerResponse;
-import com.github.dockerjava.api.exception.NotModifiedException;
-import com.github.dockerjava.api.model.*;
-import com.github.dockerjava.core.DefaultDockerClientConfig;
-import com.github.dockerjava.core.DockerClientBuilder;
-import com.github.dockerjava.core.DockerClientConfig;
-import com.github.dockerjava.httpclient5.ApacheDockerHttpClient;
-import com.github.dockerjava.transport.DockerHttpClient;
-import lombok.extern.log4j.Log4j2;
-
-import java.util.Arrays;
-import java.util.Objects;
-
-@Log4j2
-public class DockerConfig extends BaseTest {
-
-    private final static DockerClientConfig dockerClientConfig = DefaultDockerClientConfig.createDefaultConfigBuilder()
-            .withDockerHost("unix:///var/run/docker.sock")
-            .build();
-
-    private final static DockerHttpClient dockerHttpClient = new ApacheDockerHttpClient.Builder()
-            .dockerHost(dockerClientConfig.getDockerHost())
-            .sslConfig(dockerClientConfig.getSSLConfig())
-            .build();
-
-    public final static HostConfig hostConfig = HostConfig.newHostConfig()
-            .withRestartPolicy(RestartPolicy.alwaysRestart());
-
-    public final static DockerClient dockerClient = DockerClientBuilder.getInstance()
-            .withDockerHttpClient(dockerHttpClient)
-            .build();
-
-    public static void startContainer(Container container) throws InterruptedException {
-        final InspectContainerResponse inspect = dockerClient.inspectContainerCmd(container.getHash())
-                .exec();
-        log.trace("container {} state {}", container.getHash(), inspect.getState().getStatus());
-        if (Objects.equals(inspect.getState().getStatus(), "running")) {
-            return;
-        }
-        log.info("container {} needs to be started", container.getInternalName());
-        dockerClient.startContainerCmd(container.getHash())
-                .exec();
-        int i = 0;
-        final int max = 10;
-        String state;
-        final boolean hasHealthCheck = getHealthCheck(container.getId()) != null;
-        do {
-            final InspectContainerResponse response = dockerClient.inspectContainerCmd(container.getHash())
-                    .exec();
-            if (hasHealthCheck && response.getState().getHealth() == null) {
-                log.error("Container does not have a healthcheck response");
-                throw new InterruptedException("Container does not have a healthcheck response");
-            }
-            if (hasHealthCheck) {
-                state = response.getState().getHealth().getStatus();
-                log.trace("container {} state is {}, attempt {} of {}", container.getInternalName(), state, i, max);
-                if (!state.equals("healthy")) {
-                    Thread.sleep(10 * 1000L);
-                }
-            } else {
-                Thread.sleep(60 * 1000L);
-                state = "healthy";
-            }
-            i++;
-        } while (!state.equals("healthy") && i != max);
-        if (state.equals("healthy")) {
-            log.info("container {} was started", container.getInternalName());
-        } else {
-            log.error("failed to start container {} as state {} is not healthy after {} tries", container.getHash(),
-                    state, i);
-            throw new RuntimeException("Failed to start container " + container.getHash() + " as state " + state + " is not healthy after " + i + " tries");
-        }
-    }
-
-    public static void stopContainer(Container container) {
-        final InspectContainerResponse inspect = dockerClient.inspectContainerCmd(container.getHash())
-                .exec();
-        log.trace("container {} state {}", container.getHash(), inspect.getState().getStatus());
-        if (Objects.equals(inspect.getState().getStatus(), "exited")) {
-            return;
-        }
-        log.info("container {} needs to be stopped", container.getInternalName());
-        dockerClient.stopContainerCmd(container.getHash())
-                .exec();
-    }
-
-    public static void createContainer(String bind, Container container, String... environment) {
-        createContainer(bind, container, null, environment);
-    }
-
-    public static void createContainer(String bind, Container container, Integer port, String... environment) {
-        log.trace("creating container with internalName={}, ipAddress={}, hostname={}, environment={}",
-                container.getInternalName(), container.getIpAddress(), container.getInternalName(),
-                environment);
-        final HostConfig hostConfig1;
-        final String network = (container.getInternalName().contains("userdb") ? "fda-userdb" : "fda-public");
-        if (bind == null) {
-            log.trace("map standard binding /tmp:/tmp");
-            hostConfig1 = hostConfig.withNetworkMode(network)
-                    .withBinds(Bind.parse("/tmp:/tmp"));
-        } else {
-            log.trace("map non-standard binding {}, /tmp:/tmp", bind);
-            hostConfig1 = hostConfig.withNetworkMode(network)
-                    .withBinds(Bind.parse(bind), Bind.parse("/tmp:/tmp"));
-        }
-        if (port != null) {
-            log.trace("map port binding {}:{}", port, port);
-            hostConfig1.withPortBindings(PortBinding.parse(port + ":" + port));
-        }
-        final CreateContainerCmd cmd = dockerClient.createContainerCmd(container.getImage().getRepository() + ":" + container.getImage().getTag())
-                .withHostConfig(hostConfig1)
-                .withName(container.getInternalName())
-                .withIpv4Address(container.getIpAddress())
-                .withHostName(container.getInternalName())
-                .withEnv(environment)
-                .withHealthcheck(getHealthCheck(container.getId()));
-        final CreateContainerResponse response;
-        if (container.getInternalName().contains("search")) {
-            response = cmd.withPortBindings(PortBinding.parse("9200:9200"))
-                    .exec();
-        } else {
-            response = cmd.exec();
-        }
-        container.setHash(response.getId());
-    }
-
-    public static void removeAllContainers() {
-        dockerClient.listContainersCmd()
-                .withShowAll(true)
-                .exec()
-                .forEach(container -> {
-                    log.info("Delete container {}", Arrays.asList(container.getNames()));
-                    try {
-                        dockerClient.stopContainerCmd(container.getId()).exec();
-                    } catch (NotModifiedException e) {
-                        // ignore
-                    }
-                    dockerClient.removeContainerCmd(container.getId()).exec();
-                });
-        dockerClient.listVolumesCmd()
-                .withDanglingFilter(true)
-                .exec()
-                .getVolumes()
-                .forEach(volume -> {
-                    log.info("Delete volume {}", volume.getName());
-                    try {
-                        dockerClient.removeVolumeCmd(volume.getName()).exec();
-                    } catch (NotModifiedException e) {
-                        // ignore
-                    }
-                });
-    }
-
-    public static void removeAllNetworks() {
-        dockerClient.listNetworksCmd()
-                .exec()
-                .stream()
-                .filter(n -> n.getName().startsWith("fda"))
-                .forEach(network -> {
-                    log.info("Delete network {}", network.getName());
-                    dockerClient.removeNetworkCmd(network.getId()).exec();
-                });
-    }
-
-    public static void createAllNetworks() {
-        dockerClient.createNetworkCmd()
-                .withName("fda-userdb")
-                .withIpam(new Network.Ipam()
-                        .withConfig(new Network.Ipam.Config()
-                                .withSubnet("172.30.0.0/16")))
-                .withEnableIpv6(false)
-                .exec();
-        dockerClient.createNetworkCmd()
-                .withName("fda-public")
-                .withIpam(new Network.Ipam()
-                        .withConfig(new Network.Ipam.Config()
-                                .withSubnet("172.31.0.0/16")))
-                .withEnableIpv6(false)
-                .exec();
-    }
-
-    private static HealthCheck getHealthCheck(Long containerId) {
-        if (containerId == null) {
-            log.trace("container does not have a healthcheck config");
-            return null;
-        }
-        switch (Integer.parseInt("" + containerId)) {
-            case 1:
-                log.debug("container with id {} has a health check config", containerId);
-                return CONTAINER_1_HEALTHCHECK;
-            case 2:
-                log.debug("container with id {} has a health check config", containerId);
-                return CONTAINER_2_HEALTHCHECK;
-            case 3:
-                log.debug("container with id {} has a health check config", containerId);
-                return CONTAINER_3_HEALTHCHECK;
-            case 4:
-                log.debug("container with id {} has a health check config", containerId);
-                return CONTAINER_4_HEALTHCHECK;
-            case 5:
-                log.debug("container with id {} has a health check config", containerId);
-                return CONTAINER_BROKER_HEALTHCHECK;
-        }
-        log.trace("container with id {} does not have a healthcheck config", containerId);
-        return null;
-    }
-
-
-}
diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java
index 84e89a26418be53fa0a71e47ac3db987f7af2b90..f74c46576d1c7f61112ad51a1eec6b5b7282a263 100644
--- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java
+++ b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java
@@ -4,8 +4,10 @@ import at.tuwien.api.amqp.CreateVirtualHostDto;
 import at.tuwien.api.amqp.GrantVirtualHostPermissionsDto;
 import at.tuwien.api.auth.SignupRequestDto;
 import at.tuwien.api.container.ContainerDto;
-import at.tuwien.api.container.ContainerStateDto;
-import at.tuwien.api.container.image.*;
+import at.tuwien.api.container.image.ImageBriefDto;
+import at.tuwien.api.container.image.ImageCreateDto;
+import at.tuwien.api.container.image.ImageDateDto;
+import at.tuwien.api.container.image.ImageDto;
 import at.tuwien.api.database.DatabaseCreateDto;
 import at.tuwien.api.database.DatabaseDto;
 import at.tuwien.api.database.LicenseDto;
@@ -27,9 +29,14 @@ import at.tuwien.api.maintenance.BannerMessageUpdateDto;
 import at.tuwien.api.semantics.OntologyCreateDto;
 import at.tuwien.api.semantics.OntologyModifyDto;
 import at.tuwien.api.user.*;
+import at.tuwien.entities.container.Container;
+import at.tuwien.entities.container.image.ContainerImage;
 import at.tuwien.entities.container.image.ContainerImageDate;
 import at.tuwien.entities.database.*;
+import at.tuwien.entities.database.table.Table;
+import at.tuwien.entities.database.table.columns.TableColumn;
 import at.tuwien.entities.database.table.columns.TableColumnConcept;
+import at.tuwien.entities.database.table.columns.TableColumnType;
 import at.tuwien.entities.database.table.columns.TableColumnUnit;
 import at.tuwien.entities.database.table.constraints.Constraints;
 import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKey;
@@ -44,19 +51,11 @@ import at.tuwien.entities.user.Role;
 import at.tuwien.entities.user.User;
 import at.tuwien.entities.user.UserAttribute;
 import at.tuwien.querystore.Query;
-import at.tuwien.entities.container.Container;
-import at.tuwien.entities.container.image.ContainerImage;
-import at.tuwien.entities.container.image.ContainerImageEnvironmentItem;
-import at.tuwien.entities.container.image.ContainerImageEnvironmentItemType;
-import at.tuwien.entities.database.table.Table;
-import at.tuwien.entities.database.table.columns.TableColumn;
-import at.tuwien.entities.database.table.columns.TableColumnType;
 import at.tuwien.utils.ArrayUtil;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
-import com.github.dockerjava.api.model.HealthCheck;
 
 import java.math.BigInteger;
 import java.security.Principal;
@@ -64,7 +63,8 @@ import java.time.Instant;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static java.time.temporal.ChronoUnit.*;
+import static java.time.temporal.ChronoUnit.HOURS;
+import static java.time.temporal.ChronoUnit.MINUTES;
 
 /**
  * Database 1 (Private, User 1)
@@ -661,54 +661,12 @@ public abstract class BaseTest {
 
     public final static Long IMAGE_1_ID = 1L;
     public final static String IMAGE_1_REGISTRY = "docker.io/library";
-    public final static String IMAGE_1_REPOSITORY = "mariadb";
-    public final static String IMAGE_1_TAG = "10.5";
-    public final static String IMAGE_1_HASH = "d6a5e003eae42397f7ee4589e9f21e231d3721ac131970d2286bd616e7f55bb4";
+    public final static String IMAGE_1_NAME = "mariadb";
+    public final static String IMAGE_1_VERSION = "10.5";
     public final static String IMAGE_1_DIALECT = "org.hibernate.dialect.MariaDBDialect";
     public final static String IMAGE_1_DRIVER = "org.mariadb.jdbc.Driver";
     public final static String IMAGE_1_JDBC = "mariadb";
     public final static Integer IMAGE_1_PORT = 3306;
-    public final static Long IMAGE_1_SIZE = 12000L;
-    public final static Instant IMAGE_1_BUILT = Instant.now().minus(40, HOURS);
-
-    public final static List<ContainerImageEnvironmentItem> IMAGE_1_ENV = List.of(
-            ContainerImageEnvironmentItem.builder()
-                    .iid(IMAGE_1_ID)
-                    .key("UZERNAME")
-                    .value("root")
-                    .type(ContainerImageEnvironmentItemType.PRIVILEGED_USERNAME)
-                    .build(),
-            ContainerImageEnvironmentItem.builder()
-                    .iid(IMAGE_1_ID)
-                    .key("MARIADB_ROOT_PASSWORD")
-                    .value("mariadb")
-                    .type(ContainerImageEnvironmentItemType.PRIVILEGED_PASSWORD)
-                    .build(),
-            ContainerImageEnvironmentItem.builder()
-                    .iid(IMAGE_1_ID)
-                    .key("MARIADB_USER")
-                    .value("mariadb")
-                    .type(ContainerImageEnvironmentItemType.USERNAME)
-                    .build(),
-            ContainerImageEnvironmentItem.builder()
-                    .iid(IMAGE_1_ID)
-                    .key("MARIADB_PASSWORD")
-                    .value("mariadb")
-                    .type(ContainerImageEnvironmentItemType.PASSWORD)
-                    .build());
-
-    public final static List<ImageEnvItemDto> IMAGE_1_ENV_DTO = List.of(ImageEnvItemDto.builder()
-                    .iid(IMAGE_1_ID)
-                    .key("MARIADB_USER")
-                    .value("mariadb")
-                    .type(ImageEnvItemTypeDto.USERNAME)
-                    .build(),
-            ImageEnvItemDto.builder()
-                    .iid(IMAGE_1_ID)
-                    .key("MARIADB_PASSWORD")
-                    .value("mariadb")
-                    .type(ImageEnvItemTypeDto.PASSWORD)
-                    .build());
 
     public final static Long IMAGE_DATE_1_ID = 1L;
     public final static Long IMAGE_DATE_1_IMAGE_ID = IMAGE_1_ID;
@@ -736,13 +694,12 @@ public abstract class BaseTest {
 
     public final static ImageCreateDto IMAGE_1_CREATE_DTO = ImageCreateDto.builder()
             .registry(IMAGE_1_REGISTRY)
-            .repository(IMAGE_1_REPOSITORY)
-            .tag(IMAGE_1_TAG)
+            .name(IMAGE_1_NAME)
+            .version(IMAGE_1_VERSION)
             .dialect(IMAGE_1_DIALECT)
             .jdbcMethod(IMAGE_1_JDBC)
             .driverClass(IMAGE_1_DRIVER)
             .defaultPort(IMAGE_1_PORT)
-            .environment(IMAGE_1_ENV_DTO)
             .build();
 
     public final static Long IMAGE_DATE_2_ID = 2L;
@@ -795,64 +752,46 @@ public abstract class BaseTest {
 
     public final static ContainerImage IMAGE_1 = ContainerImage.builder()
             .id(IMAGE_1_ID)
-            .registry(IMAGE_1_REGISTRY)
-            .repository(IMAGE_1_REPOSITORY)
-            .tag(IMAGE_1_TAG)
-            .hash(IMAGE_1_HASH)
-            .compiled(IMAGE_1_BUILT)
+            .name(IMAGE_1_NAME)
+            .version(IMAGE_1_VERSION)
             .dialect(IMAGE_1_DIALECT)
             .jdbcMethod(IMAGE_1_JDBC)
             .driverClass(IMAGE_1_DRIVER)
-            .size(IMAGE_1_SIZE)
-            .environment(IMAGE_1_ENV)
             .defaultPort(IMAGE_1_PORT)
             .dateFormats(List.of(IMAGE_DATE_1, IMAGE_DATE_2, IMAGE_DATE_3))
             .build();
 
     public final static ContainerImage IMAGE_1_SIMPLE = ContainerImage.builder()
             .id(IMAGE_1_ID)
-            .registry(IMAGE_1_REGISTRY)
-            .repository(IMAGE_1_REPOSITORY)
-            .tag(IMAGE_1_TAG)
-            .hash(IMAGE_1_HASH)
-            .compiled(IMAGE_1_BUILT)
+            .name(IMAGE_1_NAME)
+            .version(IMAGE_1_VERSION)
             .dialect(IMAGE_1_DIALECT)
             .jdbcMethod(IMAGE_1_JDBC)
             .driverClass(IMAGE_1_DRIVER)
-            .size(IMAGE_1_SIZE)
-            .environment(List.of() /* for jpa */)
             .defaultPort(IMAGE_1_PORT)
-            .environment(List.of() /* for jpa */)
             .build();
 
     public final static ImageDto IMAGE_1_DTO = ImageDto.builder()
             .id(IMAGE_1_ID)
             .registry(IMAGE_1_REGISTRY)
-            .repository(IMAGE_1_REPOSITORY)
-            .tag(IMAGE_1_TAG)
-            .hash(IMAGE_1_HASH)
-            .compiled(IMAGE_1_BUILT)
+            .name(IMAGE_1_NAME)
+            .version(IMAGE_1_VERSION)
             .dialect(IMAGE_1_DIALECT)
             .jdbcMethod(IMAGE_1_JDBC)
             .driverClass(IMAGE_1_DRIVER)
-            .size(BigInteger.valueOf(IMAGE_1_SIZE))
-            .environment(IMAGE_1_ENV_DTO)
             .defaultPort(IMAGE_1_PORT)
             .dateFormats(List.of(IMAGE_DATE_1_DTO, IMAGE_DATE_2_DTO, IMAGE_DATE_3_DTO))
             .build();
 
     public final static ImageBriefDto IMAGE_1_BRIEF_DTO = ImageBriefDto.builder()
             .id(IMAGE_1_ID)
-            .registry(IMAGE_1_REGISTRY)
-            .repository(IMAGE_1_REPOSITORY)
-            .tag(IMAGE_1_TAG)
+            .name(IMAGE_1_NAME)
+            .version(IMAGE_1_VERSION)
             .build();
 
     public final static Long IMAGE_2_ID = 2L;
-    public final static String IMAGE_2_REGISTRY = "docker.io/library";
-    public final static String IMAGE_2_REPOSITORY = "mysql";
-    public final static String IMAGE_2_TAG = "8.0";
-    public final static String IMAGE_2_HASH = "83b40f2726e5";
+    public final static String IMAGE_2_NAME = "mariadb";
+    public final static String IMAGE_2_VERSION = "8.0";
     public final static Integer IMAGE_2_PORT = 3306;
     public final static String IMAGE_2_DIALECT = "org.hibernate.dialect.MySQLDialect";
     public final static String IMAGE_2_DRIVER = "com.mysql.jdbc.Driver";
@@ -860,66 +799,17 @@ public abstract class BaseTest {
     public final static Long IMAGE_2_SIZE = 12000L;
     public final static Instant IMAGE_2_BUILT = Instant.now().minus(38, HOURS);
 
-    public final static List<ImageEnvItemDto> IMAGE_2_ENV_DTO = List.of(ImageEnvItemDto.builder()
-                    .iid(IMAGE_2_ID)
-                    .key("MYSQL_USER")
-                    .value("mysql")
-                    .type(ImageEnvItemTypeDto.USERNAME)
-                    .build(),
-            ImageEnvItemDto.builder()
-                    .iid(IMAGE_2_ID)
-                    .key("MYSQL_PASSWORD")
-                    .value("mysql")
-                    .type(ImageEnvItemTypeDto.PASSWORD)
-                    .build());
-
-    public final static Long IMAGE_BROKER_ID = 2L;
-    public final static String IMAGE_BROKER_REPOSITORY = "rabbitmq";
-    public final static String IMAGE_BROKER_TAG = "3-management-alpine";
-    public final static String IMAGE_BROKER_HASH = "d6a5e003eae42397f7ee4589e9f21e231d3721ac131970d2286bd616e7f55bb4\n";
-    public final static String IMAGE_BROKER_DIALECT = "org.hibernate.dialect.MariaDBDialect";
-    public final static String IMAGE_BROKER_DRIVER = "org.mariadb.jdbc.Driver";
-    public final static String IMAGE_BROKER_JDBC = "mariadb";
-    public final static Integer IMAGE_BROKER_PORT = 15672;
-    public final static Long IMAGE_BROKER_SIZE = 12000L;
-    public final static Instant IMAGE_BROKER_BUILT = Instant.now().minus(40, HOURS);
-
-    public final static ContainerImage IMAGE_BROKER = ContainerImage.builder()
-            .id(IMAGE_BROKER_ID)
-            .repository(IMAGE_BROKER_REPOSITORY)
-            .tag(IMAGE_BROKER_TAG)
-            .hash(IMAGE_BROKER_HASH)
-            .compiled(IMAGE_BROKER_BUILT)
-            .dialect(IMAGE_BROKER_DIALECT)
-            .jdbcMethod(IMAGE_BROKER_JDBC)
-            .driverClass(IMAGE_BROKER_DRIVER)
-            .size(IMAGE_BROKER_SIZE)
-            .defaultPort(IMAGE_BROKER_PORT)
-            .build();
-
-    public final static Long IMAGE_ELASTIC_ID = 3L;
-    public final static String IMAGE_ELASTIC_REPOSITORY = "opensearchproject/opensearch";
-    public final static String IMAGE_ELASTIC_TAG = "2";
-
-    public final static ContainerImage IMAGE_ELASTIC = ContainerImage.builder()
-            .id(IMAGE_ELASTIC_ID)
-            .repository(IMAGE_ELASTIC_REPOSITORY)
-            .tag(IMAGE_ELASTIC_TAG)
-            .build();
 
     public final static Long CONTAINER_1_ID = 1L;
-    public final static String CONTAINER_1_HASH = "deadbeef";
     public final static ContainerImage CONTAINER_1_IMAGE = IMAGE_1;
     public final static ImageBriefDto CONTAINER_1_IMAGE_BRIEF_DTO = IMAGE_1_BRIEF_DTO;
     public final static String CONTAINER_1_NAME = "u01";
     public final static String CONTAINER_1_INTERNALNAME = "dbrepo-userdb-u01";
-    public final static String CONTAINER_1_IP = "172.30.0.5";
+    public final static String CONTAINER_1_IP = "127.0.0.1";
+    public final static Integer CONTAINER_1_PORT = 3308;
+    public final static String CONTAINER_1_PRIVILEGED_USERNAME = "root";
+    public final static String CONTAINER_1_PRIVILEGED_PASSWORD = "dbrepo";
     public final static Instant CONTAINER_1_CREATED = Instant.ofEpochSecond(1677399629) /* 2023-02-26 08:20:29 (UTC) */;
-    public final static HealthCheck CONTAINER_1_HEALTHCHECK = new HealthCheck()
-            .withTest(List.of("CMD", "mysqladmin", "ping", "--host=127.0.0.1", "--password=mariadb"));
-    public final static String[] CONTAINER_1_ENV = new String[]{"MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=weather"};
-    public final static ContainerStateDto CONTAINER_1_STATE = ContainerStateDto.RUNNING;
-    public final static Boolean CONTAINER_1_RUNNING = true;
 
     public final static Container CONTAINER_1 = Container.builder()
             .id(CONTAINER_1_ID)
@@ -927,13 +817,11 @@ public abstract class BaseTest {
             .internalName(CONTAINER_1_INTERNALNAME)
             .imageId(IMAGE_1_ID)
             .image(CONTAINER_1_IMAGE)
-            .hash(CONTAINER_1_HASH)
             .created(CONTAINER_1_CREATED)
-            .ipAddress(CONTAINER_1_IP)
-            .createdBy(USER_1_ID)
-            .ownedBy(USER_1_ID)
-            .creator(USER_1)
-            .owner(USER_1)
+            .host(CONTAINER_1_IP)
+            .port(CONTAINER_1_PORT)
+            .privilegedUsername(CONTAINER_1_PRIVILEGED_USERNAME)
+            .privilegedPassword(CONTAINER_1_PRIVILEGED_PASSWORD)
             .build();
 
     public final static Container CONTAINER_1_SIMPLE = Container.builder()
@@ -941,14 +829,12 @@ public abstract class BaseTest {
             .name(CONTAINER_1_NAME)
             .internalName(CONTAINER_1_INTERNALNAME)
             .imageId(IMAGE_1_ID)
-            .image(CONTAINER_1_IMAGE)
-            .hash(CONTAINER_1_HASH)
+            .image(null /* for jpa */)
             .created(CONTAINER_1_CREATED)
-            .ipAddress(CONTAINER_1_IP)
-            .createdBy(USER_1_ID)
-            .ownedBy(USER_1_ID)
-            .creator(null /* for jpa */)
-            .owner(null /* for jpa */)
+            .host(CONTAINER_1_IP)
+            .port(CONTAINER_1_PORT)
+            .privilegedUsername(CONTAINER_1_PRIVILEGED_USERNAME)
+            .privilegedPassword(CONTAINER_1_PRIVILEGED_PASSWORD)
             .build();
 
     public final static ContainerDto CONTAINER_1_DTO = ContainerDto.builder()
@@ -956,24 +842,17 @@ public abstract class BaseTest {
             .name(CONTAINER_1_NAME)
             .internalName(CONTAINER_1_INTERNALNAME)
             .image(CONTAINER_1_IMAGE_BRIEF_DTO)
-            .hash(CONTAINER_1_HASH)
             .created(CONTAINER_1_CREATED)
-            .ipAddress(CONTAINER_1_IP)
+            .host(CONTAINER_1_IP)
             .owner(USER_1_BRIEF_DTO)
-            .state(CONTAINER_1_STATE)
-            .running(CONTAINER_1_RUNNING)
             .build();
 
     public final static Long CONTAINER_2_ID = 2L;
-    public final static String CONTAINER_2_HASH = "deadbeef";
     public final static ContainerImage CONTAINER_2_IMAGE = IMAGE_1;
     public final static String CONTAINER_2_NAME = "u02";
     public final static String CONTAINER_2_INTERNALNAME = "dbrepo-userdb-u02";
     public final static String CONTAINER_2_IP = "172.30.0.6";
     public final static Instant CONTAINER_2_CREATED = Instant.ofEpochSecond(1677399655) /* 2023-02-26 08:20:55 (UTC) */;
-    public final static HealthCheck CONTAINER_2_HEALTHCHECK = new HealthCheck()
-            .withTest(List.of("CMD", "mysqladmin", "ping", "--host=127.0.0.1", "--password=mariadb"));
-    public final static String[] CONTAINER_2_ENV = new String[]{"MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=zoo"};
 
     public final static Container CONTAINER_2 = Container.builder()
             .id(CONTAINER_2_ID)
@@ -981,13 +860,8 @@ public abstract class BaseTest {
             .internalName(CONTAINER_2_INTERNALNAME)
             .imageId(IMAGE_1_ID)
             .image(CONTAINER_2_IMAGE)
-            .hash(CONTAINER_2_HASH)
             .created(CONTAINER_2_CREATED)
-            .ipAddress(CONTAINER_2_IP)
-            .createdBy(USER_2_ID)
-            .ownedBy(USER_2_ID)
-            .creator(USER_2)
-            .owner(USER_2)
+            .host(CONTAINER_2_IP)
             .build();
 
     public final static Container CONTAINER_2_SIMPLE = Container.builder()
@@ -996,25 +870,16 @@ public abstract class BaseTest {
             .internalName(CONTAINER_2_INTERNALNAME)
             .imageId(IMAGE_1_ID)
             .image(CONTAINER_2_IMAGE)
-            .hash(CONTAINER_2_HASH)
             .created(CONTAINER_2_CREATED)
-            .ipAddress(CONTAINER_2_IP)
-            .createdBy(USER_2_ID)
-            .ownedBy(USER_2_ID)
-            .creator(null /* for jpa */)
-            .owner(null /* for jpa */)
+            .host(CONTAINER_2_IP)
             .build();
 
     public final static Long CONTAINER_3_ID = 3L;
-    public final static String CONTAINER_3_HASH = "deadbeef";
     public final static ContainerImage CONTAINER_3_IMAGE = IMAGE_1;
     public final static String CONTAINER_3_NAME = "u03";
     public final static String CONTAINER_3_INTERNALNAME = "dbrepo-userdb-u03";
     public final static String CONTAINER_3_IP = "172.30.0.7";
     public final static Instant CONTAINER_3_CREATED = Instant.ofEpochSecond(1677399672) /* 2023-02-26 08:21:12 (UTC) */;
-    public final static HealthCheck CONTAINER_3_HEALTHCHECK = new HealthCheck()
-            .withTest(List.of("CMD", "mysqladmin", "ping", "--host=127.0.0.1", "--password=mariadb"));
-    public final static String[] CONTAINER_3_ENV = new String[]{"MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=musicology"};
 
     public final static Container CONTAINER_3 = Container.builder()
             .id(CONTAINER_3_ID)
@@ -1022,13 +887,8 @@ public abstract class BaseTest {
             .internalName(CONTAINER_3_INTERNALNAME)
             .imageId(IMAGE_1_ID)
             .image(CONTAINER_3_IMAGE)
-            .hash(CONTAINER_3_HASH)
             .created(CONTAINER_3_CREATED)
-            .ipAddress(CONTAINER_3_IP)
-            .createdBy(USER_3_ID)
-            .ownedBy(USER_3_ID)
-            .creator(USER_3)
-            .owner(USER_3)
+            .host(CONTAINER_3_IP)
             .build();
 
     public final static Container CONTAINER_3_SIMPLE = Container.builder()
@@ -1037,25 +897,16 @@ public abstract class BaseTest {
             .internalName(CONTAINER_3_INTERNALNAME)
             .imageId(IMAGE_1_ID)
             .image(CONTAINER_3_IMAGE)
-            .hash(CONTAINER_3_HASH)
             .created(CONTAINER_3_CREATED)
-            .ipAddress(CONTAINER_3_IP)
-            .createdBy(USER_3_ID)
-            .ownedBy(USER_3_ID)
-            .creator(null /* for jpa */)
-            .owner(null /* for jpa */)
+            .host(CONTAINER_3_IP)
             .build();
 
     public final static Long CONTAINER_4_ID = 4L;
-    public final static String CONTAINER_4_HASH = "deadbeef";
     public final static ContainerImage CONTAINER_4_IMAGE = IMAGE_1;
     public final static String CONTAINER_4_NAME = "u04";
     public final static String CONTAINER_4_INTERNALNAME = "dbrepo-userdb-u04";
     public final static String CONTAINER_4_IP = "172.30.0.8";
     public final static Instant CONTAINER_4_CREATED = Instant.ofEpochSecond(1677399688) /* 2023-02-26 08:21:28 (UTC) */;
-    public final static HealthCheck CONTAINER_4_HEALTHCHECK = new HealthCheck()
-            .withTest(List.of("CMD", "mysqladmin", "ping", "--host=127.0.0.1", "--password=mariadb"));
-    public final static String[] CONTAINER_4_ENV = new String[]{"MARIADB_ROOT_PASSWORD=mariadb", "MARIADB_DATABASE=sensor"};
 
     public final static Container CONTAINER_4 = Container.builder()
             .id(CONTAINER_4_ID)
@@ -1063,13 +914,8 @@ public abstract class BaseTest {
             .internalName(CONTAINER_4_INTERNALNAME)
             .imageId(IMAGE_1_ID)
             .image(CONTAINER_4_IMAGE)
-            .hash(CONTAINER_4_HASH)
             .created(CONTAINER_4_CREATED)
-            .ipAddress(CONTAINER_4_IP)
-            .createdBy(USER_4_ID)
-            .ownedBy(USER_4_ID)
-            .creator(USER_4)
-            .owner(USER_4)
+            .host(CONTAINER_4_IP)
             .build();
 
     public final static Container CONTAINER_4_SIMPLE = Container.builder()
@@ -1078,57 +924,12 @@ public abstract class BaseTest {
             .internalName(CONTAINER_4_INTERNALNAME)
             .imageId(IMAGE_1_ID)
             .image(CONTAINER_4_IMAGE)
-            .hash(CONTAINER_4_HASH)
             .created(CONTAINER_4_CREATED)
-            .ipAddress(CONTAINER_4_IP)
-            .createdBy(USER_4_ID)
-            .ownedBy(USER_4_ID)
-            .creator(null /* for jpa */)
-            .owner(null /* for jpa */)
+            .host(CONTAINER_4_IP)
             .build();
 
-    public final static Long CONTAINER_BROKER_ID = 5L;
-    public final static String CONTAINER_BROKER_NAME = "dbrepo-broker-service";
-    public final static String CONTAINER_BROKER_INTERNAL_NAME = "dbrepo-broker-service";
-    public final static String CONTAINER_BROKER_IP = "172.31.0.2";
-    public final static String CONTAINER_BROKER_HASH = "deadbeef";
-    public final static Instant CONTAINER_BROKER_CREATED = Instant.ofEpochSecond(1677399705) /* 2023-02-26 08:21:45 (UTC) */;
-    public final static HealthCheck CONTAINER_BROKER_HEALTHCHECK = new HealthCheck()
-            .withTest(List.of("CMD", "rabbitmq-diagnostics", "-q", "ping"));
-    public final static String[] CONTAINER_BROKER_ENV = new String[]{};
-
-    public final static Container CONTAINER_BROKER = Container.builder()
-            .id(CONTAINER_BROKER_ID)
-            .name(CONTAINER_BROKER_NAME)
-            .internalName(CONTAINER_BROKER_INTERNAL_NAME)
-            .imageId(IMAGE_BROKER_ID)
-            .image(IMAGE_BROKER)
-            .ipAddress(CONTAINER_BROKER_IP)
-            .hash(CONTAINER_BROKER_HASH)
-            .created(CONTAINER_BROKER_CREATED)
-            .creator(USER_1)
-            .build();
 
-    public final static Long CONTAINER_ELASTIC_ID = 6L;
-    public final static String CONTAINER_ELASTIC_NAME = "dbrepo-search-db";
-    public final static String CONTAINER_ELASTIC_INTERNAL_NAME = "dbrepo-search-db";
-    public final static String CONTAINER_ELASTIC_IP = "172.31.0.3";
-    public final static String CONTAINER_ELASTIC_HASH = "deadbeef";
-    public final static Instant CONTAINER_ELASTIC_CREATED = Instant.ofEpochSecond(1677399721) /* 2023-02-26 08:22:01 (UTC) */;
-    public final static String[] CONTAINER_ELASTIC_ENV = new String[]{"discovery.type=single-node", "ES_JAVA_OPTS=-Xms4g -Xmx4g",
-            "logger.level=WARN", "bootstrap.memory_lock=true", "plugins.security.disabled=true"};
-
-    public final static Container CONTAINER_ELASTIC = Container.builder()
-            .id(CONTAINER_ELASTIC_ID)
-            .name(CONTAINER_ELASTIC_NAME)
-            .internalName(CONTAINER_ELASTIC_INTERNAL_NAME)
-            .imageId(IMAGE_ELASTIC_ID)
-            .image(IMAGE_ELASTIC)
-            .hash(CONTAINER_ELASTIC_HASH)
-            .ipAddress(CONTAINER_ELASTIC_IP)
-            .created(CONTAINER_ELASTIC_CREATED)
-            .creator(USER_1)
-            .build();
+
 
     public final static Long DATABASE_1_ID = 1L;
     public final static String DATABASE_1_NAME = "Weather";
@@ -1148,6 +949,7 @@ public abstract class BaseTest {
             .isPublic(DATABASE_1_PUBLIC)
             .name(DATABASE_1_NAME)
             .description(DATABASE_1_DESCRIPTION)
+            .cid(CONTAINER_1_ID)
             .container(CONTAINER_1)
             .internalName(DATABASE_1_INTERNALNAME)
             .exchangeName(DATABASE_1_EXCHANGE)
@@ -1170,6 +972,7 @@ public abstract class BaseTest {
             .isPublic(DATABASE_1_PUBLIC)
             .name(DATABASE_1_NAME)
             .description(DATABASE_1_DESCRIPTION)
+            .cid(CONTAINER_1_ID)
             .container(null /* for jpa */)
             .internalName(DATABASE_1_INTERNALNAME)
             .exchangeName(DATABASE_1_EXCHANGE)
@@ -1253,6 +1056,7 @@ public abstract class BaseTest {
     public final static DatabaseCreateDto DATABASE_1_CREATE = DatabaseCreateDto.builder()
             .name(DATABASE_1_NAME)
             .isPublic(DATABASE_1_PUBLIC)
+            .cid(CONTAINER_1_ID)
             .build();
 
     public final static Long DATABASE_2_ID = 2L;
@@ -1273,7 +1077,8 @@ public abstract class BaseTest {
             .isPublic(DATABASE_2_PUBLIC)
             .name(DATABASE_2_NAME)
             .description(DATABASE_2_DESCRIPTION)
-            .container(CONTAINER_2)
+            .cid(CONTAINER_1_ID)
+            .container(CONTAINER_1)
             .internalName(DATABASE_2_INTERNALNAME)
             .exchangeName(DATABASE_2_EXCHANGE)
             .created(DATABASE_2_CREATED)
@@ -1295,6 +1100,7 @@ public abstract class BaseTest {
             .isPublic(DATABASE_2_PUBLIC)
             .name(DATABASE_2_NAME)
             .description(DATABASE_2_DESCRIPTION)
+            .cid(CONTAINER_1_ID)
             .container(null /* for jpa */)
             .internalName(DATABASE_2_INTERNALNAME)
             .exchangeName(DATABASE_2_EXCHANGE)
@@ -1384,6 +1190,7 @@ public abstract class BaseTest {
     public final static DatabaseCreateDto DATABASE_2_CREATE = DatabaseCreateDto.builder()
             .name(DATABASE_2_NAME)
             .isPublic(DATABASE_2_PUBLIC)
+            .cid(CONTAINER_1_ID)
             .build();
 
     public final static Long DATABASE_3_ID = 3L;
@@ -1404,7 +1211,8 @@ public abstract class BaseTest {
             .isPublic(DATABASE_3_PUBLIC)
             .name(DATABASE_3_NAME)
             .description(DATABASE_3_DESCRIPTION)
-            .container(CONTAINER_3)
+            .cid(CONTAINER_1_ID)
+            .container(CONTAINER_1)
             .internalName(DATABASE_3_INTERNALNAME)
             .exchangeName(DATABASE_3_EXCHANGE)
             .created(DATABASE_3_CREATED)
@@ -1426,6 +1234,7 @@ public abstract class BaseTest {
             .isPublic(DATABASE_3_PUBLIC)
             .name(DATABASE_3_NAME)
             .description(DATABASE_3_DESCRIPTION)
+            .cid(CONTAINER_1_ID)
             .container(null /* for jpa */)
             .internalName(DATABASE_3_INTERNALNAME)
             .exchangeName(DATABASE_3_EXCHANGE)
@@ -1509,6 +1318,7 @@ public abstract class BaseTest {
     public final static DatabaseCreateDto DATABASE_3_CREATE = DatabaseCreateDto.builder()
             .name(DATABASE_3_NAME)
             .isPublic(DATABASE_3_PUBLIC)
+            .cid(CONTAINER_1_ID)
             .build();
 
     public final static Long DATABASE_4_ID = 4L;
@@ -1527,6 +1337,7 @@ public abstract class BaseTest {
             .isPublic(DATABASE_4_PUBLIC)
             .name(DATABASE_4_NAME)
             .description(DATABASE_4_DESCRIPTION)
+            .cid(CONTAINER_4_ID)
             .container(CONTAINER_4)
             .internalName(DATABASE_4_INTERNALNAME)
             .exchangeName(DATABASE_4_EXCHANGE)
@@ -1549,6 +1360,7 @@ public abstract class BaseTest {
             .isPublic(DATABASE_4_PUBLIC)
             .name(DATABASE_4_NAME)
             .description(DATABASE_4_DESCRIPTION)
+            .cid(CONTAINER_4_ID)
             .container(CONTAINER_4)
             .internalName(DATABASE_4_INTERNALNAME)
             .exchangeName(DATABASE_4_EXCHANGE)
@@ -4291,7 +4103,6 @@ public abstract class BaseTest {
     public final static Boolean VIEW_1_INITIAL_VIEW = false;
     public final static String VIEW_1_NAME = "JUnit";
     public final static String VIEW_1_INTERNAL_NAME = "junit";
-    public final static Long VIEW_1_CONTAINER_ID = CONTAINER_1_ID;
     public final static Long VIEW_1_DATABASE_ID = DATABASE_1_ID;
     public final static Boolean VIEW_1_PUBLIC = true;
     public final static String VIEW_1_QUERY = "select `location`, `lat`, `lng` from `weather_location`";
@@ -4347,7 +4158,6 @@ public abstract class BaseTest {
             .isInitialView(VIEW_1_INITIAL_VIEW)
             .name(VIEW_1_NAME)
             .internalName(VIEW_1_INTERNAL_NAME)
-            .vcid(VIEW_1_CONTAINER_ID)
             .vdbid(VIEW_1_DATABASE_ID)
             .isPublic(VIEW_1_PUBLIC)
             .query(VIEW_1_QUERY)
@@ -4371,7 +4181,6 @@ public abstract class BaseTest {
     public final static Boolean VIEW_2_INITIAL_VIEW = false;
     public final static String VIEW_2_NAME = "JUnit2";
     public final static String VIEW_2_INTERNAL_NAME = "junit2";
-    public final static Long VIEW_2_CONTAINER_ID = CONTAINER_1_ID;
     public final static Long VIEW_2_DATABASE_ID = DATABASE_1_ID;
     public final static Boolean VIEW_2_PUBLIC = true;
     public final static String VIEW_2_QUERY = "select `date`, `location`, `mintemp`, `rainfall` from `weather_aus` where `location` = 'Albury'";
@@ -4457,7 +4266,6 @@ public abstract class BaseTest {
             .isInitialView(VIEW_2_INITIAL_VIEW)
             .name(VIEW_2_NAME)
             .internalName(VIEW_2_INTERNAL_NAME)
-            .vcid(VIEW_2_CONTAINER_ID)
             .vdbid(VIEW_2_DATABASE_ID)
             .isPublic(VIEW_2_PUBLIC)
             .columns(VIEW_2_COLUMNS)
@@ -4481,7 +4289,6 @@ public abstract class BaseTest {
     public final static Boolean VIEW_3_INITIAL_VIEW = false;
     public final static String VIEW_3_NAME = "JUnit3";
     public final static String VIEW_3_INTERNAL_NAME = "junit3";
-    public final static Long VIEW_3_CONTAINER_ID = CONTAINER_1_ID;
     public final static Long VIEW_3_DATABASE_ID = DATABASE_1_ID;
     public final static Boolean VIEW_3_PUBLIC = false;
     public final static String VIEW_3_QUERY = "select w.`mintemp`, w.`rainfall`, w.`location`, m.`date` from `weather_aus` w join `junit2` m on m.`location` = w.`location`";
@@ -4552,7 +4359,6 @@ public abstract class BaseTest {
             .isInitialView(VIEW_3_INITIAL_VIEW)
             .name(VIEW_3_NAME)
             .internalName(VIEW_3_INTERNAL_NAME)
-            .vcid(VIEW_3_CONTAINER_ID)
             .vdbid(VIEW_3_DATABASE_ID)
             .isPublic(VIEW_3_PUBLIC)
             .columns(VIEW_3_COLUMNS)
@@ -4576,7 +4382,6 @@ public abstract class BaseTest {
     public final static Boolean VIEW_4_INITIAL_VIEW = false;
     public final static String VIEW_4_NAME = "Mock View";
     public final static String VIEW_4_INTERNAL_NAME = "mock_view";
-    public final static Long VIEW_4_CONTAINER_ID = CONTAINER_2_ID;
     public final static Long VIEW_4_DATABASE_ID = DATABASE_2_ID;
     public final static Long VIEW_4_TABLE_ID = TABLE_4_ID;
     public final static Boolean VIEW_4_PUBLIC = true;
@@ -4840,7 +4645,6 @@ public abstract class BaseTest {
             .isInitialView(VIEW_4_INITIAL_VIEW)
             .name(VIEW_4_NAME)
             .internalName(VIEW_4_INTERNAL_NAME)
-            .vcid(VIEW_4_CONTAINER_ID)
             .vdbid(VIEW_4_DATABASE_ID)
             .isPublic(VIEW_4_PUBLIC)
             .query(VIEW_4_QUERY)
@@ -4853,7 +4657,6 @@ public abstract class BaseTest {
     public final static Boolean VIEW_5_INITIAL_VIEW = false;
     public final static String VIEW_5_NAME = "Mock View";
     public final static String VIEW_5_INTERNAL_NAME = "mock_view";
-    public final static Long VIEW_5_CONTAINER_ID = CONTAINER_2_ID;
     public final static Long VIEW_5_DATABASE_ID = DATABASE_2_ID;
     public final static Boolean VIEW_5_PUBLIC = true;
     public final static String VIEW_5_QUERY = "SELECT `location`, `lat`, `lng` FROM `weather_location` WHERE `location` = 'Albury'";
@@ -4863,7 +4666,6 @@ public abstract class BaseTest {
             .isInitialView(VIEW_5_INITIAL_VIEW)
             .name(VIEW_5_NAME)
             .internalName(VIEW_5_INTERNAL_NAME)
-            .vcid(VIEW_5_CONTAINER_ID)
             .vdbid(VIEW_5_DATABASE_ID)
             .isPublic(VIEW_5_PUBLIC)
             .query(VIEW_5_QUERY)
@@ -4950,7 +4752,6 @@ public abstract class BaseTest {
 
     public final static Long IDENTIFIER_1_ID = 1L;
     public final static Long IDENTIFIER_1_QUERY_ID = QUERY_1_ID;
-    public final static Long IDENTIFIER_1_CONTAINER_ID = CONTAINER_1_ID;
     public final static Long IDENTIFIER_1_DATABASE_ID = DATABASE_1_ID;
     public final static String IDENTIFIER_1_DESCRIPTION = "Selecting all from the weather Austrian table";
     public final static String IDENTIFIER_1_DESCRIPTION_MODIFY = "Selecting some from the weather Austrian table";
@@ -4997,7 +4798,6 @@ public abstract class BaseTest {
 
     public final static Identifier IDENTIFIER_1 = Identifier.builder()
             .id(IDENTIFIER_1_ID)
-            .containerId(IDENTIFIER_1_CONTAINER_ID)
             .databaseId(IDENTIFIER_1_DATABASE_ID)
             .queryId(IDENTIFIER_1_QUERY_ID)
             .description(IDENTIFIER_1_DESCRIPTION)
@@ -5022,7 +4822,6 @@ public abstract class BaseTest {
 
     public final static Identifier IDENTIFIER_1_SIMPLE = Identifier.builder()
             .id(IDENTIFIER_1_ID)
-            .containerId(IDENTIFIER_1_CONTAINER_ID)
             .databaseId(IDENTIFIER_1_DATABASE_ID)
             .queryId(IDENTIFIER_1_QUERY_ID)
             .description(IDENTIFIER_1_DESCRIPTION)
@@ -5047,7 +4846,6 @@ public abstract class BaseTest {
 
     public final static Identifier IDENTIFIER_1_WITH_DOI = Identifier.builder()
             .id(IDENTIFIER_1_ID)
-            .containerId(IDENTIFIER_1_CONTAINER_ID)
             .databaseId(IDENTIFIER_1_DATABASE_ID)
             .queryId(IDENTIFIER_1_QUERY_ID)
             .description(IDENTIFIER_1_DESCRIPTION)
@@ -5072,7 +4870,6 @@ public abstract class BaseTest {
 
     public final static IdentifierDto IDENTIFIER_1_DTO = IdentifierDto.builder()
             .id(IDENTIFIER_1_ID)
-            .containerId(IDENTIFIER_1_CONTAINER_ID)
             .databaseId(IDENTIFIER_1_DATABASE_ID)
             .queryId(IDENTIFIER_1_QUERY_ID)
             .description(IDENTIFIER_1_DESCRIPTION)
@@ -5097,7 +4894,6 @@ public abstract class BaseTest {
 
     public final static IdentifierDto IDENTIFIER_1_WITH_DOI_DTO = IdentifierDto.builder()
             .id(IDENTIFIER_1_ID)
-            .containerId(IDENTIFIER_1_CONTAINER_ID)
             .databaseId(IDENTIFIER_1_DATABASE_ID)
             .queryId(IDENTIFIER_1_QUERY_ID)
             .description(IDENTIFIER_1_DESCRIPTION)
@@ -5122,7 +4918,6 @@ public abstract class BaseTest {
 
     public final static Long IDENTIFIER_2_ID = 2L;
     public final static Long IDENTIFIER_2_QUERY_ID = QUERY_2_ID;
-    public final static Long IDENTIFIER_2_CONTAINER_ID = CONTAINER_2_ID;
     public final static Long IDENTIFIER_2_DATABASE_ID = DATABASE_2_ID;
     public final static String IDENTIFIER_2_DESCRIPTION = "Selecting all from the weather Austria table";
     public final static String IDENTIFIER_2_TITLE = "Australian weather data";
@@ -5188,7 +4983,6 @@ public abstract class BaseTest {
 
     public final static Identifier IDENTIFIER_2 = Identifier.builder()
             .id(IDENTIFIER_2_ID)
-            .containerId(IDENTIFIER_2_CONTAINER_ID)
             .databaseId(IDENTIFIER_2_DATABASE_ID)
             .queryId(IDENTIFIER_2_QUERY_ID)
             .description(IDENTIFIER_2_DESCRIPTION)
@@ -5214,7 +5008,6 @@ public abstract class BaseTest {
 
     public final static Identifier IDENTIFIER_2_SIMPLE = Identifier.builder()
             .id(IDENTIFIER_2_ID)
-            .containerId(IDENTIFIER_2_CONTAINER_ID)
             .databaseId(IDENTIFIER_2_DATABASE_ID)
             .queryId(IDENTIFIER_2_QUERY_ID)
             .description(IDENTIFIER_2_DESCRIPTION)
@@ -5240,7 +5033,6 @@ public abstract class BaseTest {
 
     public final static IdentifierDto IDENTIFIER_2_DTO = IdentifierDto.builder()
             .id(IDENTIFIER_2_ID)
-            .containerId(IDENTIFIER_2_CONTAINER_ID)
             .databaseId(IDENTIFIER_2_DATABASE_ID)
             .queryId(IDENTIFIER_2_QUERY_ID)
             .description(IDENTIFIER_2_DESCRIPTION)
@@ -5331,7 +5123,6 @@ public abstract class BaseTest {
 
     public final static IdentifierDto IDENTIFIER_1_MODIFY_DTO = IdentifierDto.builder()
             .id(IDENTIFIER_1_ID)
-            .containerId(CONTAINER_1_ID)
             .databaseId(DATABASE_1_ID)
             .queryId(IDENTIFIER_1_QUERY_ID)
             .databaseId(IDENTIFIER_1_DATABASE_ID)
@@ -5349,7 +5140,6 @@ public abstract class BaseTest {
             .build();
 
     public final static IdentifierCreateDto IDENTIFIER_1_DTO_REQUEST = IdentifierCreateDto.builder()
-            .cid(IDENTIFIER_1_CONTAINER_ID)
             .dbid(IDENTIFIER_1_DATABASE_ID)
             .description(IDENTIFIER_1_DESCRIPTION)
             .title(IDENTIFIER_1_TITLE)
@@ -5363,7 +5153,6 @@ public abstract class BaseTest {
             .build();
 
     public final static IdentifierUpdateDto IDENTIFIER_1_DTO_UPDATE_REQUEST = IdentifierUpdateDto.builder()
-            .cid(IDENTIFIER_1_CONTAINER_ID)
             .dbid(IDENTIFIER_1_DATABASE_ID)
             .description(IDENTIFIER_1_DESCRIPTION)
             .title(IDENTIFIER_1_TITLE_MODIFY)
@@ -5401,7 +5190,6 @@ public abstract class BaseTest {
 
     public final static IdentifierCreateDto IDENTIFIER_2_DTO_REQUEST = IdentifierCreateDto.builder()
             .qid(IDENTIFIER_2_QUERY_ID)
-            .cid(IDENTIFIER_2_CONTAINER_ID)
             .qid(IDENTIFIER_2_QUERY_ID)
             .dbid(IDENTIFIER_2_DATABASE_ID)
             .description(IDENTIFIER_2_DESCRIPTION)
@@ -5418,7 +5206,6 @@ public abstract class BaseTest {
 
     public final static IdentifierUpdateDto IDENTIFIER_2_DTO_UPDATE_REQUEST = IdentifierUpdateDto.builder()
             .qid(IDENTIFIER_2_QUERY_ID)
-            .cid(IDENTIFIER_2_CONTAINER_ID)
             .qid(IDENTIFIER_2_QUERY_ID)
             .dbid(IDENTIFIER_2_DATABASE_ID)
             .description(IDENTIFIER_2_DESCRIPTION)
@@ -5436,7 +5223,6 @@ public abstract class BaseTest {
 
     public final static Long IDENTIFIER_3_ID = 3L;
     public final static Long IDENTIFIER_3_QUERY_ID = QUERY_3_ID;
-    public final static Long IDENTIFIER_3_CONTAINER_ID = CONTAINER_3_ID;
     public final static Long IDENTIFIER_3_DATABASE_ID = DATABASE_3_ID;
     public final static String IDENTIFIER_3_DESCRIPTION = "Selecting all from the weather Norwegian table";
     public final static String IDENTIFIER_3_TITLE = "Norwegian weather data";
@@ -5522,7 +5308,6 @@ public abstract class BaseTest {
 
     public final static Identifier IDENTIFIER_3 = Identifier.builder()
             .id(IDENTIFIER_3_ID)
-            .containerId(IDENTIFIER_3_CONTAINER_ID)
             .databaseId(IDENTIFIER_3_DATABASE_ID)
             .queryId(IDENTIFIER_3_QUERY_ID)
             .description(IDENTIFIER_3_DESCRIPTION)
@@ -5548,7 +5333,6 @@ public abstract class BaseTest {
 
     public final static Identifier IDENTIFIER_3_SIMPLE = Identifier.builder()
             .id(IDENTIFIER_3_ID)
-            .containerId(IDENTIFIER_3_CONTAINER_ID)
             .databaseId(IDENTIFIER_3_DATABASE_ID)
             .queryId(IDENTIFIER_3_QUERY_ID)
             .description(IDENTIFIER_3_DESCRIPTION)
@@ -5574,7 +5358,6 @@ public abstract class BaseTest {
 
     public final static IdentifierDto IDENTIFIER_3_DTO = IdentifierDto.builder()
             .id(IDENTIFIER_3_ID)
-            .containerId(IDENTIFIER_3_CONTAINER_ID)
             .databaseId(IDENTIFIER_3_DATABASE_ID)
             .queryId(IDENTIFIER_3_QUERY_ID)
             .description(IDENTIFIER_3_DESCRIPTION)
@@ -5599,7 +5382,6 @@ public abstract class BaseTest {
             .build();
 
     public final static IdentifierCreateDto IDENTIFIER_3_DTO_REQUEST = IdentifierCreateDto.builder()
-            .cid(IDENTIFIER_3_CONTAINER_ID)
             .dbid(IDENTIFIER_3_DATABASE_ID)
             .qid(IDENTIFIER_3_QUERY_ID)
             .description(IDENTIFIER_3_DESCRIPTION)
@@ -5614,7 +5396,6 @@ public abstract class BaseTest {
             .build();
 
     public final static IdentifierUpdateDto IDENTIFIER_3_DTO_UPDATE_REQUEST = IdentifierUpdateDto.builder()
-            .cid(IDENTIFIER_3_CONTAINER_ID)
             .dbid(IDENTIFIER_3_DATABASE_ID)
             .qid(IDENTIFIER_3_QUERY_ID)
             .description(IDENTIFIER_3_DESCRIPTION)
@@ -5630,7 +5411,6 @@ public abstract class BaseTest {
             .build();
 
     public final static Long IDENTIFIER_4_ID = 4L;
-    public final static Long IDENTIFIER_4_CONTAINER_ID = CONTAINER_4_ID;
     public final static Long IDENTIFIER_4_DATABASE_ID = DATABASE_4_ID;
     public final static String IDENTIFIER_4_DESCRIPTION = "Selecting all from the weather Sweden table";
     public final static String IDENTIFIER_4_TITLE = "Sweden weather data";
@@ -5655,7 +5435,6 @@ public abstract class BaseTest {
 
     public final static Identifier IDENTIFIER_4 = Identifier.builder()
             .id(IDENTIFIER_4_ID)
-            .containerId(IDENTIFIER_4_CONTAINER_ID)
             .databaseId(IDENTIFIER_4_DATABASE_ID)
             .description(IDENTIFIER_4_DESCRIPTION)
             .title(IDENTIFIER_4_TITLE)
@@ -5680,7 +5459,6 @@ public abstract class BaseTest {
 
     public final static Identifier IDENTIFIER_4_SIMPLE = Identifier.builder()
             .id(IDENTIFIER_4_ID)
-            .containerId(IDENTIFIER_4_CONTAINER_ID)
             .databaseId(IDENTIFIER_4_DATABASE_ID)
             .description(IDENTIFIER_4_DESCRIPTION)
             .title(IDENTIFIER_4_TITLE)
diff --git a/dbrepo-metadata-db/test/src/test/resources/schema.sql b/dbrepo-metadata-db/test/src/test/resources/schema.sql
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000