rg_backend_academy/lecture_2/01-definicni-prikazy.sql

53 lines
1.4 KiB
SQL

-- Display the name of the current database.
SELECT CURRENT_DATABASE();
-- Create tables starting with entities that do not depend on foreign keys.
CREATE TABLE enclosures (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
area INTEGER,
biome VARCHAR(20)
);
-- Delete a table.
DROP TABLE enclosures;
CREATE TABLE keepers (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR NOT NULL,
salary NUMERIC(10, 3)
);
CREATE TABLE animals (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
enclosure_id INT,
name VARCHAR NOT NULL,
is_healthy BOOLEAN DEFAULT TRUE,
adoption_date DATE,
note TEXT,
FOREIGN KEY (enclosure_id) REFERENCES enclosures (id)
);
-- Junction table for the many-to-many relationship.
CREATE TABLE animals_keepers (
animal_id INT NOT NULL,
keeper_id INT NOT NULL,
PRIMARY KEY (animal_id, keeper_id),
FOREIGN KEY (animal_id) REFERENCES animals (id),
FOREIGN KEY (keeper_id) REFERENCES keepers (id)
);
-- Change an existing table structure with ALTER TABLE.
ALTER TABLE keepers ADD COLUMN role VARCHAR(255) DEFAULT 'caretaker';
ALTER TABLE keepers RENAME COLUMN role TO position;
ALTER TABLE keepers ALTER COLUMN position TYPE TEXT;
-- This statement intentionally fails because the text default cannot be converted to INT.
ALTER TABLE keepers ALTER COLUMN position TYPE INT;
ALTER TABLE keepers DROP COLUMN position;