CREATE TABLE Familiar
    (
    Nombre varchar (25),
    Apellidos varchar (60),
    Telefono char (9),
    Direccion varchar (70),
    ID_Familia integer PRIMARY KEY
    
);

CREATE TABLE Enterrador
    (Nombre varchar (25),
    Apellidos varchar (60),
    Direccion varchar (70),
    Telefono char (9),
    Telef_Movil char(9),
    Antiguedad integer,
    Salario numeric(10,2) CHECK ((Salario < 2000) and (Salario >1400)),
    Dni varchar(9) PRIMARY KEY
);

CREATE TABLE Administrativo
    (Nombre varchar (25),
    Apellidos varchar (60),
    Direccion varchar (70),
    Telefono char (9),
    Telef_Movil char(9),
    Antiguedad integer,
    Salario numeric(10,2) CHECK ((Salario <=1400) and (Salario >1000)) ,
    Dni varchar(9) PRIMARY KEY
);

CREATE TABLE Sector
    (ID_Sector integer PRIMARY KEY,
    Nombre varchar (30),
    Superficie integer CHECK (Superficie < 1000),
    Capacidad integer
);

CREATE TABLE Jardinero
    (Nombre varchar (25),
    Apellidos varchar (60),
    Direccion varchar (70),
    Telefono char (9),
    Telef_Movil char(9),
    Antiguedad integer,
    Salario numeric(10,2) CHECK ((Salario <=1000) and (Salario >850)),
    Sector integer NOT NULL DEFAULT 0,
    CONSTRAINT ajena_Sector FOREIGN KEY(Sector)
        REFERENCES Sector(ID_Sector)
        ON DELETE SET DEFAULT
        ON UPDATE CASCADE,
    Dni varchar(9) PRIMARY KEY
);

CREATE TABLE Tumba
    (ID_Tumba integer PRIMARY KEY,
    Tipo varchar (10),
    Sector integer NOT NULL DEFAULT 0,
    CONSTRAINT ajena_Sector FOREIGN KEY(Sector)
        REFERENCES Sector(ID_Sector)
        ON DELETE SET DEFAULT
        ON UPDATE CASCADE
        
);

CREATE TABLE Nicho
    (Altura smallint CHECK (Altura <= 5) ,
    ID_Nicho integer PRIMARY KEY,
    CONSTRAINT ajena_ID_Nicho FOREIGN KEY(ID_Nicho)
        REFERENCES Tumba(ID_TUMBA)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    Inscripcion text
);
    
CREATE TABLE FosaComun
    (ID_Fosa integer PRIMARY KEY,
    CONSTRAINT ajena_ID_Fosa FOREIGN KEY(ID_Fosa)
    REFERENCES Tumba(ID_TUMBA)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    Capacidad integer CHECK (Capacidad <= 200)
);
    
CREATE TABLE Panteon
    (ID_Panteon integer PRIMARY KEY,
    CONSTRAINT ajena_ID_Panteon FOREIGN KEY(ID_Panteon)
        REFERENCES Tumba(ID_TUMBA)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    ID_Familia integer,
    CONSTRAINT ajena_ID_Familia FOREIGN KEY(ID_Familia)
        REFERENCES Familiar(ID_Familia)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    Capacidad smallint Check (Capacidad not > 6),
    Inscripcion text
);


CREATE TABLE Factura
        (Cantidad numeric(10,2),
        Fecha Date,
        ID_Familia integer,
        ID_Admin varchar(9),
        CONSTRAINT Clave_Factura PRIMARY KEY(Fecha,ID_Familia,ID_Admin),
        CONSTRAINT ajena_ID_Admin FOREIGN KEY(ID_Admin)
                REFERENCES Administrativo(Dni)
                ON DELETE CASCADE
                ON UPDATE CASCADE,
        CONSTRAINT ajena_ID_Familia FOREIGN KEY(ID_Familia)
                REFERENCES Familiar(ID_Familia)
                ON DELETE CASCADE
                ON UPDATE CASCADE

);

CREATE TABLE Fallecido
        (
        Nombre varchar (25),
        Apellidos varchar (60),
        FechaNacimiento date,
        FechaMuerte date CHECK (FechaMuerte >= FechaNacimiento),
        Enterrador varchar(9) NOT NULL,
        ID_Familia integer,
        Tumba integer NOT NULL,
        CONSTRAINT ajena_Enterrador FOREIGN KEY(Enterrador)
                REFERENCES Enterrador(Dni)
                ON DELETE SET NULL
                ON UPDATE CASCADE,
        CONSTRAINT ajena_Tumba FOREIGN KEY(Tumba)
                REFERENCES Tumba(ID_Tumba)
                ON DELETE CASCADE
                ON UPDATE CASCADE,
        CONSTRAINT ajena_ID_Familia FOREIGN KEY(ID_Familia)
                REFERENCES Familiar(ID_Familia)
                ON DELETE SET NULL
                ON UPDATE CASCADE,
        Dni varchar(9) PRIMARY KEY
);