关系,在创建表的时候,您可以使用 created_at
和 updated_at
列来追踪记录的生命周期。在插入多对多关系记录时,您可以使用 through
中间表,并在 through
表中添加 created_at
和 updated_at
列来记录创建时间和更新时间。对于查询,您可以使用 with_created_at
和 with_updated_at
子查询来获取记录创建时间和更新时间。
例如,在以下模型中,我们定义了一个 through
中间表,用于记录 users
和 posts
之间的多对多关系:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL
);
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
user_id INTEGER NOT NULL REFERENCES users(id)
);
CREATE TABLE post_views (
id SERIAL PRIMARY KEY,
post_id INTEGER NOT NULL REFERENCES posts(id),
user_id INTEGER NOT NULL REFERENCES users(id),
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
在插入多对多关系记录时,我们使用 through
中间表,并在 through
表中添加 created_at
和 updated_at
列来记录创建时间和更新时间:
INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com');
INSERT INTO posts (title, content, user_id) VALUES ('Hello World', 'This is a test post.', 1);
INSERT INTO post_views (post_id, user_id, created_at, updated_at) VALUES (1, 1, NOW(), NOW());
对于查询,我们可以使用 with_created_at
和 with_updated_at
子查询来获取记录创建时间和更新时间:
SELECT users.id AS user_id, users.name AS user_name, users.email AS user_email,
posts.id AS post_id, posts.title AS post_title, posts.content AS post_content,
post_views.created_at AS created_at, post_views.updated_at AS updated_at
FROM users
JOIN (
SELECT post_id, user_id, created_at, updated_at
FROM post_views
WHERE post_id = 1 AND user_id = 1
) post_views ON users.id = post_views.user_id
JOIN posts ON posts.id = post_views.post_id;
这样,您就可以在同一个表上使用多对多关系,并轻松地跟踪记录的生命周期。
领取专属 10元无门槛券
手把手带您无忧上云