
/* Creo un dominio para las coordenadas, en este caso 
lo simplifiqué usando varchar pero podría ser un número con precisión o
mucho mejor un tipo de datos específico si se va a utilizar para hacer cálculos*/

CREATE DOMAIN coordenada AS varchar(128);

/*

Esta es la tabla sobre las estaciones de alquiler. Se añade la clave primaria porque
está referenciada, desde dos campos de la tabla trips. 

Se usa un tipo especial para las coordenadas (no era tampoco necesario)

----------------- 

Un ejemplo de instrucción de inserción sería
INSERT INTO stations VALUES(3,'Colleges of the Fenway','Boston','42.340021','-71.100812');

*/

CREATE TABLE stations (
    id integer primary key,
    station varchar(255) NOT NULL,
    municipality varchar(255),
    lat coordenada,
    lng coordenada
);

/*

Esta es la tabla sobre los viajes. Se añade una clave primaria (id) pero en realidad es una
tabla que NO está normalizada. Verás que hay información sobre entidades que podrían (deberían) estar
separadas (la bicicleta y la persona, por ejemplo). Pero refactorizar eso, es decir normalizarlo
implicaría crear tres tablas, relacionadas entre sí lo que complicaría enormemente la importación

He añadido algunas restricciones para proteger la importación, pero eso supone que hay que supervisar 
el proceso de importación de datos para ir modificando todas las instrucciones de inserción del archivo original

El campo más extraño es quizá birth_date. Lo he dejado como número pero no tiene mucho sentido. Lo ideal podría ser
 procesar ese valor para obtener solo el año y guardarlo como integer.

----------------- 

Un ejemplo de instrucción de inserción sería (hay varios tipos)

INSERT INTO trips VALUES(1,9,'2011-07-28 10:12:00',99,'2011-07-28 10:12:00',99,'B00468','Registered','97217',1975.9999999999999786,'Male'); 
*/


CREATE TABLE trips (
    id integer PRIMARY KEY,
    duration integer DEFAULT 0 NOT NULL,
    start_date timestamp(0),
    start_station integer,
    end_date timestamp(0),
    end_station integer,
    bike_number character varying(6),
    sub_type character varying(255) check (sub_type IN ('Casual','Registered')),
    zip_code character varying(255),
    birth_date numeric,
    gender varchar(128) check (gender IN ('Male','Female','Not Known')) DEFAULT 'Not Known',
    CONSTRAINT fk_start_station FOREIGN KEY (start_station) references stations(id) ON UPDATE CASCADE ON DELETE SET NULL,
    CONSTRAINT fk_end_station FOREIGN KEY (end_station) references stations(id) ON UPDATE CASCADE ON DELETE SET NULL
);

