You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.1 KiB
41 lines
1.1 KiB
2 years ago
|
CREATE TABLE list (
|
||
|
id INT GENERATED ALWAYS AS IDENTITY,
|
||
|
owner_id INT NOT NULL,
|
||
|
name VARCHAR(255) NOT NULL,
|
||
|
PRIMARY KEY(id),
|
||
|
CONSTRAINT fk_owner
|
||
|
FOREIGN KEY(owner_id)
|
||
|
REFERENCES users(id)
|
||
|
);
|
||
|
|
||
|
CREATE TABLE note (
|
||
|
id INT GENERATED ALWAYS AS IDENTITY,
|
||
|
list_id INT NOT NULL, -- references a list
|
||
|
writer_id INT NOT NULL, -- references a user
|
||
|
content VARCHAR(255) NOT NULL, -- about one twitter post worth
|
||
|
modified_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- the last time this item was modified
|
||
|
due_at TIMESTAMPTZ, -- a nullable time at which the task needs to be complete
|
||
|
PRIMARY KEY(id),
|
||
|
CONSTRAINT fk_writer
|
||
|
FOREIGN KEY(writer_id)
|
||
|
REFERENCES users(id),
|
||
|
CONSTRAINT fk_list
|
||
|
FOREIGN KEY(list_id)
|
||
|
REFERENCES list(id)
|
||
|
);
|
||
|
|
||
|
-- The following section automatically updates the "modified" column when a record is updated
|
||
|
CREATE OR REPLACE FUNCTION trigger_set_timestamp()
|
||
|
RETURNS TRIGGER AS $$
|
||
|
BEGIN
|
||
|
NEW.modified_at = NOW();
|
||
|
RETURN NEW;
|
||
|
END
|
||
|
$$ LANGUAGE plpgsql;
|
||
|
|
||
|
CREATE TRIGGER set_timestamp
|
||
|
BEFORE UPDATE ON note
|
||
|
FOR EACH ROW
|
||
|
EXECUTE PROCEDURE trigger_set_timestamp();
|
||
|
|