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
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();
|
|
|