CREATE TABLE USUARIO (
       id_usuario INT NOT NULL IDENTITY PRIMARY KEY
     , login VARCHAR(30)
     , password VARCHAR(30)
     , rol VARCHAR(30)
);

CREATE TABLE ASPECTO (
       id_aspecto INT NOT NULL IDENTITY PRIMARY KEY
     , nombre VARCHAR(30)
);

CREATE TABLE Plantilla (
       id_plantilla INT NOT NULL
     , nombre VARCHAR(30)
     , descripcion VARCHAR(500)
     , PRIMARY KEY (id_plantilla)
);

CREATE TABLE IDIOMA (
       id_idioma INT NOT NULL IDENTITY PRIMARY KEY
     , nombre VARCHAR(30)
);

CREATE TABLE Fase_plantilla (
       id_fase_plantilla INT NOT NULL IDENTITY PRIMARY KEY
     , nombre VARCHAR(30)
     , orden INT
     , id_plantilla INT NOT NULL
     , CONSTRAINT FK_FasePlantilla_1 FOREIGN KEY (id_plantilla)
                  REFERENCES Plantilla (id_plantilla)
);

CREATE TABLE Bloque_constructivo (
       id_bloque INT NOT NULL IDENTITY PRIMARY KEY
     , nombre VARCHAR(30)
     , tipo INT
     , fase_modo_guiado INT
     , id_plantilla INT NOT NULL
     , CONSTRAINT FK_Bloque_constructivo_1 FOREIGN KEY (id_plantilla)
                  REFERENCES Plantilla (id_plantilla)
);

CREATE TABLE Proyecto (
       id_proyecto INT NOT NULL IDENTITY PRIMARY KEY
     , nombre VARCHAR(30)
     , descripcion VARCHAR(500)
     , id_plantilla INT NOT NULL
     , CONSTRAINT FK_Proyecto_1 FOREIGN KEY (id_plantilla)
                  REFERENCES Plantilla (id_plantilla)
);

CREATE TABLE Componente_bloque (
       id_componente_bloque INT NOT NULL IDENTITY PRIMARY KEY
     , nombre VARCHAR(30)
     , tipo INT
     , posicion INT
     , orden INT
     , cardinalidad_lista INT
     , id_bloque INT NOT NULL
     , CONSTRAINT FK_Componente_1 FOREIGN KEY (id_bloque)
                  REFERENCES Bloque_constructivo (id_bloque)
);

CREATE TABLE Instancia (
       id_instancia INT NOT NULL IDENTITY PRIMARY KEY
     , nombre VARCHAR(30)
     , id_bloque INT NOT NULL
     , id_proyecto INT NOT NULL
     , CONSTRAINT FK_Instancia_1 FOREIGN KEY (id_bloque)
                  REFERENCES Bloque_constructivo (id_bloque)
     , CONSTRAINT FK_Instancia_2 FOREIGN KEY (id_proyecto)
                  REFERENCES Proyecto (id_proyecto)
);

CREATE TABLE Vista_plantilla (
       id_vista_plantilla INT NOT NULL IDENTITY PRIMARY KEY
     , nombre VARCHAR(30)
     , id_plantilla INT NOT NULL
     , CONSTRAINT FK_VistaPlantilla_1 FOREIGN KEY (id_plantilla)
                  REFERENCES Plantilla (id_plantilla)
);

CREATE TABLE Componente_instancia (
       id_componente_instancia INT NOT NULL IDENTITY PRIMARY KEY
     , texto VARCHAR(500)
     , checkbox INT
     , fecha CHAR
     , portafolio VARCHAR(500)
     , id_componente_bloque INT NOT NULL
     , id_instancia INT NOT NULL
     , modelo_madurez_puntuacion INT
     , modelo_madurez_media_parcial FLOAT
     , modelo_madurez_media_global FLOAT
     , fecha_modelo_madurez CHAR
     , CONSTRAINT FK_Contenido_componente_1 FOREIGN KEY (id_componente_bloque)
                  REFERENCES Componente_bloque (id_componente_bloque)
     , CONSTRAINT FK_Contenido_componente_2 FOREIGN KEY (id_instancia)
                  REFERENCES Instancia (id_instancia)
);

CREATE TABLE Vista_bloque (
       id_vista_bloque INT NOT NULL IDENTITY PRIMARY KEY
     , id_vista_plantilla INT NOT NULL
     , id_bloque INT NOT NULL
     , CONSTRAINT FK_VistaBloque_1 FOREIGN KEY (id_vista_plantilla)
                  REFERENCES Vista_plantilla (id_vista_plantilla)
     , CONSTRAINT FK_VistaBloque_2 FOREIGN KEY (id_bloque)
                  REFERENCES Bloque_constructivo (id_bloque)
);

CREATE TABLE Contenido_lista (
       id_contenido_lista INT NOT NULL IDENTITY PRIMARY KEY
     , id_instancia INT NOT NULL
     , id_componente_instancia INT NOT NULL
     , CONSTRAINT FK_InstanciaComponente_2 FOREIGN KEY (id_instancia)
                  REFERENCES Instancia (id_instancia)
     , CONSTRAINT FK_Componente_instancia_lista_2 FOREIGN KEY (id_componente_instancia)
                  REFERENCES Componente_instancia (id_componente_instancia)
);

CREATE TABLE Seleccion_componente_lista_bloque (
       id_seleccion_componente_lista_bloque INT NOT NULL IDENTITY PRIMARY KEY
     , id_componente_bloque INT NOT NULL
     , id_bloque INT NOT NULL
     , CONSTRAINT FK_Contenido_componente_tipo_lista_1 FOREIGN KEY (id_componente_bloque)
                  REFERENCES Componente_bloque (id_componente_bloque)
     , CONSTRAINT FK_Contenido_componente_tipo_lista_2 FOREIGN KEY (id_bloque)
                  REFERENCES Bloque_constructivo (id_bloque)
);

CREATE TABLE Fase_bloque (
       id_fase_bloque INT NOT NULL IDENTITY PRIMARY KEY
     , id_fase_plantilla INT NOT NULL
     , id_bloque INT NOT NULL
     , CONSTRAINT FK_FaseBloque_1 FOREIGN KEY (id_fase_plantilla)
                  REFERENCES Fase_plantilla (id_fase_plantilla)
     , CONSTRAINT FK_FaseBloque_2 FOREIGN KEY (id_bloque)
                  REFERENCES Bloque_constructivo (id_bloque)
);

