Skip to content

Instantly share code, notes, and snippets.

@damienix
Created December 9, 2010 14:55
Show Gist options
  • Save damienix/734786 to your computer and use it in GitHub Desktop.
Save damienix/734786 to your computer and use it in GitHub Desktop.
Stars Database
-- Creates ------------------------------------------------------------
CREATE DATABASE stars;
-- TRUNCATE TABLE objects;
CREATE TABLE objects (
oname VARCHAR(32) PRIMARY KEY,
distance FLOAT NULL
);
CREATE TABLE collections (
colname VARCHAR(32) PRIMARY KEY REFERENCES objects
);
CREATE TABLE heavenly_bodies (
hname VARCHAR(32) PRIMARY KEY REFERENCES objects,
description VARCHAR(1024) NULL,
mass FLOAT NULL,
age INT NULL,
day FLOAT NULL,
radius FLOAT NULL,
temperature INT NULL
);
CREATE TABLE stars (
sname VARCHAR(32) PRIMARY KEY REFERENCES heavenly_bodies,
spactral_class VARCHAR(32)NULL,
root_collection VARCHAR(32) REFERENCES collections NOT NULL
);
CREATE TABLE planets (
pname VARCHAR(32) PRIMARY KEY REFERENCES heavenly_bodies,
orbital_period FLOAT NULL,
root_star VARCHAR(32)REFERENCES stars NOT NULL
);
CREATE TABLE moons (
mname VARCHAR(32) PRIMARY KEY REFERENCES heavenly_bodies,
orbital_period FLOAT NULL,
root_planet VARCHAR(32)REFERENCES planets NOT NULL
);
CREATE TABLE constellations(
conname VARCHAR(32) PRIMARY KEY REFERENCES collections,
stars_marked INT NULL,
stars_with_planet INT NULL,
stars_bigger INT NULL
);
CREATE TABLE galaxies (
gname VARCHAR(32) PRIMARY KEY REFERENCES collections,
type VARCHAR(16) NOT NULL,
apparent_magnitude FLOAT NOT NULL,
addarent_dim_x FLOAT NOT NULL,
addarent_dim_y FLOAT NOT NULL,
root_constellation VARCHAR(32) REFERENCES constellations NOT NULL
);
CREATE TABLE elements (
atomic_number INT PRIMARY KEY,
elname VARCHAR(32) NOT NULL
);
CREATE TABLE is_built_of (
id INT IDENTITY PRIMARY KEY,
percantage FLOAT NOT NULL,
element INT REFERENCES elements NOT NULL,
object VARCHAR(32) REFERENCES objects NOT NULL
);
CREATE TABLE discoveries (
id INT IDENTITY PRIMARY KEY,
object VARCHAR(32) REFERENCES objects UNIQUE,
date DATE NULL
);
CREATE TABLE scientists (
name VARCHAR(64) PRIMARY KEY
);
CREATE TABLE finding (
id INT IDENTITY PRIMARY KEY,
discovery INT REFERENCES discoveries NOT NULL,
discoverer VARCHAR(64) REFERENCES scientists NOT NULL
);
-- Inserts -----------------------------------------------------------
-- Constellations
INSERT INTO objects VALUES ('Milk Way', NULL),
('Antilia', NULL),
('Aries', NULL);
INSERT INTO collections VALUES ('Milk Way'),
('Antilia'),
('Aries');
INSERT INTO constellations VALUES ('Milk Way', NULL, NULL, NULL),
('Antilia', NULL, NULL, NULL),
('Aries', NULL, NULL, NULL);
-- Galaxies
INSERT INTO objects VALUES ('Creter', NULL),
('Crux', NULL),
('Pae', NULL);
INSERT INTO collections VALUES ('Creter'),
('Crux'),
('Pae');
INSERT INTO galaxies VALUES ('Creter', 'spiral', 2.42, 1.345, 1.23, 'Milk Way'),
('Crux', 'spiral', 4.123, 1.234, 3.23, 'Aries'),
('Pae', 'eliptic', 5.1234, 1.234, 6.2341, 'Milk Way');
-- Stars
INSERT INTO objects VALUES ('Sun', 1);
INSERT INTO objects VALUES ('Aim', 29);
INSERT INTO objects VALUES ('Caph', 101);
INSERT INTO objects VALUES ('Syrius', 50);
INSERT INTO objects VALUES ('1 Ari', 542);
INSERT INTO objects VALUES ('14 Ari', 32);
INSERT INTO objects VALUES ('33 Ari', 135);
INSERT INTO objects VALUES ('19 Ari', 600);
INSERT INTO heavenly_bodies VALUES ('Sun', 'Our sun', 2022341.0, 10452134, 3.112, 50.32, 1200000000);
INSERT INTO heavenly_bodies VALUES ('Aim', '', 2041.0, 3452134, 23.112, 20.32, 23100002);
INSERT INTO heavenly_bodies VALUES ('Caph', '', 4022341.0, 852134, 50.112, 500.32, 812000000);
INSERT INTO heavenly_bodies VALUES ('Syrius', '', 431.0, 754, 5202, 180.32, 1851200);
INSERT INTO heavenly_bodies VALUES ('1 Ari', '', 1241.0, 645, 5112, 180.32, 451200);
INSERT INTO heavenly_bodies VALUES ('14 Ari', '', 2141.0, 123434, 76512, 12.32, 2251200);
INSERT INTO heavenly_bodies VALUES ('33 Ari', '', 12341.0, 121234, 652, 250.32, 21200);
INSERT INTO heavenly_bodies VALUES ('19 Ari', '', 6534, 12124, 520.0, 230.32, 2351200);
INSERT INTO stars VALUES ('Sun', 10, 'Milk Way');
INSERT INTO stars VALUES ('Aim', 22, 'Aries');
INSERT INTO stars VALUES ('Caph', 31, 'Crux');
INSERT INTO stars VALUES ('Syrius', 321, 'Crux');
INSERT INTO stars VALUES ('1 Ari', '12H', 'Aries');
INSERT INTO stars VALUES ('14 Ari', 'B8V', 'Aries');
INSERT INTO stars VALUES ('33 Ari', 'G2V', 'Aries');
INSERT INTO stars VALUES ('19 Ari', 'C9G', 'Aries');
-- Planets
INSERT INTO objects VALUES ('Mercury', 6300000);
INSERT INTO objects VALUES ('Venus', 7300000);
INSERT INTO objects VALUES ('Earth', 8300000);
INSERT INTO objects VALUES ('Mars', 8900000);
INSERT INTO objects VALUES ('Jupiter', 9000000);
INSERT INTO objects VALUES ('Saturn', 10000000);
INSERT INTO objects VALUES ('Uranus', 11000000),
('Pluto', 20000000);
INSERT INTO heavenly_bodies VALUES ('Mercury', '', 300000.0, 2345200, 0.3412, 1.00, 12);
INSERT INTO heavenly_bodies VALUES ('Venus', '', 8003000.0, 23500, 123.12, 4.12, 100);
INSERT INTO heavenly_bodies VALUES ('Earth', 'Sky-blue planet.', 6300.0, 575100, 023, 0.8321, 2120);
INSERT INTO heavenly_bodies VALUES ('Mars', 'Planet we are going to live on ;)', 6230.0, 2313, 333, 821, 50);
INSERT INTO heavenly_bodies VALUES ('Jupiter', '', 1630.0, 235240, 223, 0.8321, 20);
INSERT INTO heavenly_bodies VALUES ('Saturn', '', 8630.0, 23500, 323, 521, 234);
INSERT INTO heavenly_bodies VALUES ('Uranus', '', 1630.0, 23100, 5123, 8321, 242),
('Pluto', '', 3, 20, 0.3, 300, '-200');
INSERT INTO planets VALUES ('Mercury', 0.41, 'Sun');
INSERT INTO planets VALUES ('Venus', 1.4, 'Sun');;
INSERT INTO planets VALUES ('Earth', 10.2, 'Sun');
INSERT INTO planets VALUES ('Mars', 2.1, 'Sun');
INSERT INTO planets VALUES ('Jupiter', 2.2, 'Sun')
INSERT INTO planets VALUES ('Saturn', 7.2, 'Sun');
INSERT INTO planets VALUES ('Uranus', 20.1, 'Sun'),
('Pluto', 10, 'Sun');
-- Moons
INSERT INTO objects VALUES ('Europa', 31.1),
('Moon', 112.1),
('Deimos', 12.1),
('Phobos', 30);
INSERT INTO heavenly_bodies VALUES ('Europa', '', 3.0, 2345200, 0.3412, 1.00, 122),
('Moon', '', 8.0, 2300, 13.12, 4.12, 10),
('Deimos', '', 60.0, 260, 0.12, 0.8321, 140),
('Phobos', '', 4, 234, 0.5, 0.9, 80);
INSERT INTO moons VALUES ('Europa', 1.2, 'Jupiter'),
('Moon', 2.2, 'Earth'),
('Deimos', 0.7, 'Mars'),
('Phobos', 0.07, 'Mars');
-- Elements
INSERT INTO elements VALUES (1, 'Gal');
INSERT INTO elements VALUES (2, 'Hel');
INSERT INTO elements VALUES (3, 'Arsen'),
(5, 'Boron'),
(6, 'Carbon'),
(7, 'Nitrogen'),
(8, 'Oxygen'),
(9, 'Fluorine'),
(10, 'Neon'),
(11, 'Sodium');
-- Built of
INSERT INTO is_built_of VALUES (3.134, 1, 'Milk Way');
INSERT INTO is_built_of VALUES (6.123, 2, 'Pae');
INSERT INTO is_built_of VALUES (0.12, 3, 'Crux');
INSERT INTO is_built_of VALUES (6.14, 1, 'Pae'),
(20, 6, 'Earth'),
(5.3, 8, 'Earth'),
(0.04, 10, 'Earth'),
(33.2, 6, 'Mars'),
(1.12, 7, 'Mars');
-- Scientists
INSERT INTO scientists VALUES ('Damian Skrodzki')
INSERT INTO scientists VALUES ('Pawel Matuszewski');
INSERT INTO scientists VALUES ('Jan Kowalski');
INSERT INTO scientists VALUES ('Ela Rogowska');
INSERT INTO scientists VALUES ('Tomcio Paluch');
INSERT INTO scientists VALUES ('Cezary Andryskowski');
-- Discoveries
INSERT INTO discoveries VALUES ('Milk Way', '1000-01-01');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Damian Skrodzki');
INSERT INTO discoveries VALUES ('Crux', '1996-01-05');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Damian Skrodzki');
INSERT INTO discoveries VALUES ('Sun', '2010-12-08');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Damian Skrodzki');
INSERT INTO discoveries VALUES ('Aim', '2000-12-08');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Damian Skrodzki');
INSERT INTO discoveries VALUES ('Caph', '1990-12-08');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Damian Skrodzki');
INSERT INTO discoveries VALUES ('Earth', '2004-12-08');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Tomcio Paluch');
INSERT INTO discoveries VALUES ('Pae', '1996-01-05');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Jan Kowalski');
INSERT INTO discoveries VALUES ('Antilia', '1996-07-15');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Jan Kowalski');
INSERT INTO discoveries VALUES ('Aries', '1804-01-23');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Cezary Andryskowski');
INSERT INTO discoveries VALUES ('Moon', '2010-12-08');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Cezary Andryskowski');
INSERT INTO discoveries VALUES ('Jupiter', '2010-09-08');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Pawel Matuszewski');
INSERT INTO discoveries VALUES ('Mars', '2010-12-10');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Pawel Matuszewski');
INSERT INTO discoveries VALUES ('Europa', '2010-02-08');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Ela Rogowska');
INSERT INTO discoveries VALUES ('Venus', '2010-03-08');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Ela Rogowska');
INSERT INTO discoveries VALUES ('Deimos', '2010-11-08');
INSERT INTO finding VALUES (IDENT_CURRENT('discoveries'), 'Ela Rogowska');
-- Selects ------------------------------------------------------------------
-- Wypisuje wszystkie obiekty odkryte przez "Damian Skrodzki"
-- w chronoligicznej kolejności
SELECT discoveries.date "Data odkrycia", discoveries.object "Obiekt"
FROM finding f, discoveries
WHERE f.discoverer = 'Damian Skrodzki' and
discoveries.id = f.discovery
ORDER BY discoveries.date;
-- Konstalacja zawierajca najwicej galaktyk + gwiazd(bez tych w galaktykach)
select top 1 c.conname "Największa konstelacja"
from constellations c
order by ((select COUNT(*)
from stars s
where s.root_collection = c.conname)+
(select COUNT(*)
from galaxies g
where g.root_constellation = c.conname)) desc;
-- Liczba gwiazd (samotnych + tych z galaktyk) dla każdej konstelacji
select conname "Nazwa gwiazdozbioru", (select count(*)
from galaxies, stars
where galaxies.root_constellation=conname
and stars.root_collection=gname) as "W galaktykach", (select COUNT(*)
from stars
where root_collection=conname) as "Samotnych gwiazd", (select count(*)
from galaxies, stars
where galaxies.root_constellation=conname
and stars.root_collection=gname) + (select COUNT(*)
from stars
where root_collection=conname) as "Suma gwiazd"
from constellations c
order by ("Suma gwiazd") desc;
-- Wszyskie księżyce układu słonecznego malejąco wg masy
select mname as 'Nazwa księżyca', mass as "Masa"
from hmoons, planets p
where hmoons.root_planet=p.pname and p.root_star='Sun'
order by mass desc;
-- Wszystkie księżyce w układzie słonecznym posortowane po odległości planety
-- wokol ktorej kraza od slonca.
select mname as 'Nazwa księżyca', mass as "Masa",
objects.distance as "Odległość planety ok słońca"
from moons, planets, heavenly_bodies, objects
where root_planet=pname and root_star='Sun' and hname=mname and oname=pname
order by "Odległość planety ok słońca" desc;
-- Dla każdego ksiezyca podac mniejsze od niego planety
select mname, h1.mass as 'mass of moon', pname, h2.mass as 'mass of planet'
from moons, planets, heavenly_bodies h1, heavenly_bodies h2
where mname=h1.hname and pname=h2.hname
and h2.mass < h1.mass
order by pname;
-- Ilość każdego pierwiastka we wszechświecie posortowana od najczęściej
-- występujących.
select elname as "Nazwa pierwiastka" , sum(mass*percantage) as "Masa"
from is_built_of, heavenly_bodies, elements
where atomic_number=element and is_built_of.object=hname
group by elname
order by "Masa" desc;
-- 10 ostatnio odkrytych obiektów + nazwy odkrywców, od ostatnio odkrytego
select top 10 date, oname, scientists.name
from discoveries, objects, finding f, scientists
where object=oname and f.discoverer=scientists.name and f.discovery=discoveries.id
order by date desc;
-- Najbardziej aktywny odkrywca w ciągu ostatnich 5 lat
-- kolekcja (konstalacja lub galaktyka) z największą liczbą gwiazd
select top 1 colname, COUNT(*) as sum
from stars s, collections c
where s.root_collection = colname
group by colname
order by COUNT(*) desc;
-- konstelacja z największą liczbą gwiazd
select top 1 conname, COUNT(*) as sum
from stars s, constellations c
where s.root_collection = conname
group by conname
order by COUNT(*) desc;
-- konstelacja z największą liczbą galaktyk
select top 1 conname, COUNT(*)
from constellations, galaxies
where root_constellation=conname
group by conname
order by COUNT(*) desc;
-- Delete database
USE master
GO
ALTER DATABASE stars
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
DROP DATABASE stars;
-- Widok łączący informacje o księżycach. 'root_planet' i 'mname' z 'moons'
-- oraz 'mass' z tabeli 'heavenly_bodies'. Warunkiem złączenia jest nazwa 'mname'
create view hmoons
as select mname, mass, root_planet
from moons, heavenly_bodies
where hname=mname;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment