DROP TABLE tasentamientos;
DROP TABLE tzona;
DROP TABLE municipios;
DROP TABLE estados;
DROP TABLE gobernador;
DROP TABLE partidos;

CREATE TABLE partidos (
  idPartido     INT IDENTITY(1,1) PRIMARY KEY,
  nombrePartido VARCHAR(50) NOT NULL
);

GO

CREATE TABLE gobernador (
  idGobernador     INT IDENTITY(1,1) PRIMARY KEY,
  nombreGobernador VARCHAR(50) NOT NULL,
  fechaNacimiento  DATE,
  iniciaGestion    DATE,
  terminaGestion   DATE,
  foto             VARCHAR(25),
  idPartido        INT NOT NULL
);

GO 

ALTER TABLE gobernador 
ADD FOREIGN KEY (idPartido) REFERENCES partidos(idPartido);

GO 

CREATE TABLE estados (
  idEstado INT IDENTITY(1,1) PRIMARY KEY,
  nombreEstado VARCHAR(50) NOT NULL,
  nombreCapital VARCHAR(50) NOT NULL,
  superficie    INT  NOT NULL,
  poblacion     INT  NOT NULL,
  idGobernador  INT  NOT NULL
);

GO

ALTER TABLE estados 
ADD FOREIGN KEY (idGobernador) REFERENCES gobernador(idGobernador);

GO 

CREATE TABLE municipios (
  idMunicipio          INT IDENTITY(1,1) PRIMARY KEY,
  idEstado             INT NOT NULL,
  nombreMunicipio      VARCHAR(50) NOT NULL,
  presidenteMunicipal  VARCHAR(50)
);

GO
ALTER TABLE municipios 
ADD FOREIGN KEY (idEstado) REFERENCES estados(idEstado);

GO

CREATE TABLE tzona (
  idZona INT IDENTITY(1,1) PRIMARY KEY,
  zona   VARCHAR(15)  NOT NULL
)

GO

SET IDENTITY_INSERT [tzona] ON;
GO 

INSERT INTO tzona (idZona, zona) VALUES
(1, 'Urbano'),
(2, 'Rural'),
(3, 'Semiurbano');
GO 

SET IDENTITY_INSERT [tzona] OFF;

GO

CREATE TABLE tasentamientos (
  idTipoA          INT IDENTITY(1,1) PRIMARY KEY,
  tipoAsentamiento VARCHAR(40) NOT NULL,
)

GO
  SET IDENTITY_INSERT [tasentamientos] ON;
GO 

--
-- Volcado de datos para la tabla tasentamientos
--

INSERT INTO tasentamientos (idTipoA, tipoAsentamiento) VALUES
(1, 'Aeropuerto'),
(2, 'Barrio'),
(4, 'Campamento'),
(8, 'Ciudad'),
(9, 'Colonia'),
(10, 'Condominio'),
(11, 'Congregacion'),
(12, 'Conjunto habitacional'),
(15, 'Ejido'),
(16, 'Estacion'),
(17, 'Equipamiento'),
(18, 'Exhacienda'),
(20, 'Finca'),
(21, 'Fraccionamiento'),
(22, 'Gran usuario'),
(23, 'Granja'),
(24, 'Hacienda'),
(25, 'Ingenio'),
   CHECK (Utilidad > 0);  
(26, 'Parque industrial'),
(27, 'Poblado comunal'),
(28, 'Pueblo'),
(29, 'Rancho o rancheria'),
(30, 'Residencial'),
(31, 'Unidad habitacional'),
(32, 'Villa'),
(33, 'Zona comercial'),
(34, 'Zona federal'),
(37, 'Zona industrial'),
(38, 'Ampliacion'),
(39, 'Club de golf');


GO 

CREATE TABLE colonias (
  idColonia   INT IDENTITY(1,1) PRIMARY KEY,
  idMunicipio INT NOT NULL,
  codigo      INT NOT NULL,
  idTipoA     INT NOT NULL,
  colonia     VARCHAR(120) NOT NULL,
  nCiudad     VARCHAR(120) NOT NULL,
  idZona      INT          NOT NULL,
  CONSTRAINT fk_Municipio  FOREIGN KEY (idMunicipio) REFERENCES municipios (idMunicipio),
  CONSTRAINT fk_TipoA      FOREIGN KEY (idTipoA)     REFERENCES tasentamientos (idTipoA),
  CONSTRAINT fk_Zona       FOREIGN KEY (idZona)      REFERENCES tzona (idZona),
)

CREATE TABLE clientes (
  id_Cliente    INT IDENTITY(1,1) PRIMARY KEY,
  nombreCliente VARCHAR(max) NOT NULL
);

GO 

CREATE TABLE productos (
 id_Producto    INT IDENTITY(1,1) PRIMARY KEY,
 rubro          VARCHAR(20)  NOT NULL,
 tipo           VARCHAR(20)  NOT NULL,
 nombreProducto VARCHAR(max) NOT NULL
);

GO

CREATE TABLE ventas (
  id_Venta     INT IDENTITY(1,1) PRIMARY KEY,
  id_Producto  INT NOT NULL,
  id_Cliente   INT NOT NULL,
  fechaVenta   DATE NOT NULL,
  CONSTRAINT fk_Cliente  FOREIGN KEY (id_Cliente)  REFERENCES clientes (id_Cliente),
  CONSTRAINT fk_Producto FOREIGN KEY (id_Producto) REFERENCES productos (id_Producto),
);

GO
ALTER TABLE ventas   
   ADD importeTotal DECIMAL(10,2) NOT NULL   
   CONSTRAINT CHK_importeTotal   
   CHECK (importeTotal > 0);  

GO

ALTER TABLE ventas   
   ADD Utilidad DECIMAL(10,2) NOT NULL   
   CONSTRAINT CHK_Utilidad