首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

具有附加列的同一个表上的多对多

关系,在创建表的时候,您可以使用 created_atupdated_at 列来追踪记录的生命周期。在插入多对多关系记录时,您可以使用 through 中间表,并在 through 表中添加 created_atupdated_at 列来记录创建时间和更新时间。对于查询,您可以使用 with_created_atwith_updated_at 子查询来获取记录创建时间和更新时间。

例如,在以下模型中,我们定义了一个 through 中间表,用于记录 usersposts 之间的多对多关系:

代码语言:sql
复制
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_atupdated_at 列来记录创建时间和更新时间:

代码语言:sql
复制
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_atwith_updated_at 子查询来获取记录创建时间和更新时间:

代码语言:sql
复制
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;

这样,您就可以在同一个表上使用多对多关系,并轻松地跟踪记录的生命周期。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Hbase篇--HBase中一设计

一.前述 今天分享一篇关于HBase案例分析。...二.具体案例 案例一.    人员-角色   人员有多个角色  角色优先级   角色有多个人员   人员 删除添加角色   角色 可以添加删除人员   人员 角色 删除添加 ?...PS:说明,两张User和Role, User中定义两个族,第一个族是名字,第二个族中  多个定义为具体角色,内容定义为具体值,即优先级(这里利用了也能存信息,所以把角色Id定义为具体...,值越大代表优先级越高) 案例二.一 组织架构 部门-子部门   查询 顶级部门 查询 每个部门所有子部门   部门 添加、删除子部门   部门 添加、删除 ?...PS:解释 一个 rowkey中0代顶级部门  1代非顶级部门  因为顶级部门不是经常查  是具体子部门列表。值是具体名称。

1.9K30

python【第二十篇】Django、Ajax

1 创建多表方式有两种 1.1 方式一:自定义关系 1 class Host(models.Model): 2 nid = models.AutoField(primary_key=...models.ForeignKey(to='Host',to_field='nid') 14 aobj = models.ForeignKey(to='Application',to_field='id') 那么我们可以通过第三张操作...HostToApp,增删改查各种关系: models.HostToApp.objects.create(hobj_id=1,aobj_id=2) 1.2 方式二:自动创建第三张 1 class...9 name = models.CharField(max_length=32) 10 r = models.ManyToManyField("Host") 这种方式无法直接操作第三张,...但是可以通过10行r这个对象,进行间接操作第三张: obj = models.Application.objects.get(id=1) obj.name # 第三张操作 # 添加 obj.r.add

71520

forestploter: 分组创建具有置信区间森林图

下面是因INFORnotes分享 与其他绘制森林图包相比,forestploter将森林图视为表格,元素按行和对齐。可以调整森林图中显示内容和方式,并且可以分组显示置信区间。...森林图布局由所提供数据集决定。 基本森林图 森林图中文本 数据列名将绘制为表头,数据中内容将显示在森林图中。应提供一个或多个不带任何内容空白以绘制置信区间(CI)。...", theme = tm) # Print plot plot(pt) 编辑森林图 edit_plot可用于更改某些或行颜色或字体。...如果提供est、lower和upper数目大于绘制CI号,则est、lower和upper将被重用。如下例所示,est_gp1和est_gp2将画在第3和第5中。...但是est_gp3和est_gp4还没有被使用,它们将再次被绘制到第3和第5

7.4K32

使用VBA删除工作重复行

标签:VBA 自Excel 2010发布以来,已经具备删除工作中重复行功能,如下图1所示,即功能区“数据”选项卡“数据工具——删除重复值”。...图1 使用VBA,可以自动执行这样操作,删除工作所有数据重复行,或者指定重复行。 下面的Excel VBA代码,用于删除特定工作所有所有重复行。...如果只想删除指定(例如第1、2、3)中重复项,那么可以使用下面的代码: Sub DeDupeColSpecific() Cells.RemoveDuplicates Columns:=Array...(1, 2, 3), Header:=xlYes End Sub 可以修改代码中代表列数字,以删除你想要重复行。...注:本文学习整理自thesmallman.com,略有修改,供有兴趣朋友参考。

11K30

【Mybatis】常见面试题:处理之间关系:一,一

员工与部门有对应关系,实体类之间也有对应关系 一 在员工实体类中加入实体类部门属性 Dept dept; 查询员工信息以及员工所对应部门信息 方式一:级联方式处理映射关系 <resultMap...* property:表示需要处理一关系属性名 * javaType:表示该属性类型 <resultMap id="empAndDeptResultMapTwo" type="Emp...<em>的</em>唯一标识(namespacesqlID或mapper接口<em>的</em>全类名.方法名 column:设置分步查询<em>的</em>条件 property:处理<em>的</em>实体中<em>的</em><em>多</em><em>对</em>一<em>的</em>属性 <resultMap id="empAndDeptByStepResultMap...在部门实体类中加入员工类构成集合 private List emps; 方式一:collection collection:用来处理一映射关系 property:处理一多关系属性...-- collection:用来处理一映射关系 property:处理一多关系属性 ofType:表示该属性对应集合中存储数据类型

11510

NHibernate 映射数据更新

NHibernate 映射数据更新 最近在用 NHibernate 做更新时突然发现 NHibernate 更新策略很差, 多关系更新居然是先全部删除再插入全部数据, 感觉非常奇怪..., 再添加一个新角色, NHibernate 生成 SQL 语句如下(仅包含关系 User_Role 操作): DELETE FROM [User_Role] WHERE [UserId] =...Tip: Use set for many-to-many associations 发现了解决方案, 将映射 bag 改为用 set , 问题终于得到了解决, 改过后映射如下: Set(...不只是, 如果你集合需要更新, NHibernate 推荐是: 19.5.2....sess.Flush(); 由此可见, bag 在映射更新时性能较差, 如果不需要更新,则可以放心使用, 在需要更新时则 set 是更好选择。

92410

Django 标签筛选实现代码(一)

实现目标(一) 实现针对课程实现:课程类型、难度级别、是否隐藏三个方式筛选 每一个视频文件有针对一个课程类型、一个难度级别、是否隐藏 设计数据库如下: class VideoType(models.Model...,通过a标签中数字控制后台筛选操作 实现目标() 实现针对课程实现:课程方向、课程类型、难度级别三个方式筛选 其中每个课程方向中包含有多个课程类型,选择课程方向后,筛选课程方向包含所有课程类型...每一个视频文件有针对一个课程类型、一个难度级别 设计数据库如下,在一基础增加了一个课程方向: class VideoGroup(models.Model): Video_group...0 # 难度这边跟上面的没有关联,与一情况时一样 if dif_id == 0: pass else: condition['Video_dif_id'] = dif_id VideoDif_list...标签筛选实现代码(一),希望大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

1.7K30

GPU,具有Tensorflow多进程

https://www.tensorflow.org/guide/using_gpu 一个过程,很多GPU 这是最常见情况,因为大多数深度学习社区正在进行监督学习,具有大数据集(图像,文本,声音......这也是最困难一个:需要在多个计算单元并行化反向传播。 Jonathan Hui 在2017年发了一篇很好文章,可以直接阅读。...如果正在从事强化学习或“奇特”类型学习,例如遗传算法或储层计算,可能会注意到有多个过程是必不可少。 经验 将尝试以解决蛇游戏为例。蛇是一条正方形链,目标是在网格吃水果。...吃水果时,蛇长度增加一个,并且在网格随机出现新水果。当他(不小心)吃掉他尾巴时,蛇会失去。 ? 贪吃蛇,红点是水果 将同时播放多个代理以加速学习过程。...需要与要启动进程一样内核(有时内核可以处理多个“线程”,因此这是最后关注数字)。 将使用AWS实例p3.8xlarge,提供32个vCores和4个V100显卡。

2.2K20

多关系创建方式、forms组件

多关系三种创建方式 1.全自动,Django自动创建 class Book(models.Model): title = models.CharField(max_length=20)...全部由orm创建,内置了四个操作第三张方法add、remove、set、clear #不足:可扩展性差,自动创建第三张我发扩展和修改字段 2.纯手撸 class Book(models.Model...#不足:不再支持orm跨查询,不支持正反向查询概念,不支持内置第三张操作四个方法 3.半自动(推荐使用) 参数: through:指定第三张关系 through_fields:指定第三张中哪两个字段维护之间多关系...form_obj.cleaned_data {'username': 'jason'} # 5.forms组件中 定义字段默认都是必须传值,不能少传,传取前面的 form_obj = views.MyForm...TypedMultipleChoiceField(MultipleChoiceField) coerce = lambda val: val 选中每一个值进行一次转换 empty_value

5.1K00

Django笔记(十三)一一,一之间查询

目录 一一 创建实例 choice类型如何获取具体值 如何获取一一另一个表里面的数据 一 实体类 一代码(自己创建第三个) 一代码(Django给你生成第三个) 如何操作第三个...表里面有一个字段是一外键,关联是UserInfo,那么现在想要使用UserInfo表里面的数据对象,获取到UserProfile表里面的数据,如何获取 一 实体类 男孩 class Boy...) 有个相亲都是外键,现在想要获取到和一个男孩相亲女生有多少个,也就是男生是一个,女生是多个,典型关系 # 查询到某一个男生 obj = Boy.objects.filter...连接 一代码(Django给你生成第三个) 我们有了男孩,女孩,之前我们写一个相亲,让男孩和女孩进行关联。现在我们不写第三个了,但是还想让两个进行关联,我们可以这样写。...(Django给你生成只有3) 实体类 class Boy(models.Model): name = models.CharField(max_length=100) nvxx

2.9K20

SQL删除语句写法

最近在写SQL过程中发现需要对一张结构作调整(此处是SQL Server),其中需要删除,由于之前都是一条SQL语句删除一,于是猜想是否可以一条语句同时删除,如果可以,怎么写法?...第一次猜想如下(注意:此处是猜想,非正确写法): ALTER TABLE TableName DROP COLUMN column1,column2 但是执行后,发现语法错误, 于是改成如下方式:...ALTER TABLE TableName DROP COLUMN column1,COLUMN column2 执行正确,之后查看表结构,发现已删除,证明猜想正确。...以上所述是小编给大家介绍SQL删除语句写法,希望大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家。在此也非常感谢大家对开源独尊支持!

3.5K20

Hibernate第三天:Hibernate配置、Hibernate配置

1 Hibernate多关联映射 1.1数据库之间关系 1.1.1一多关系 l 什么样关系属于一? n 一个部门对应多个员工,一个员工只能属于某一个部门。...l 一原则: ? 1.1.2多关系 l 什么样关系属于? n 一个学生可以选择门课程,一门课程也可以被多个学生选择。...l 原则: ? 1.1.3一一关系(了解) l 什么样关系属于一一? n 一个公司只能有一个注册地址,一个注册地址只能被一个公司注册。 l 一原则: ?...*table :关系需要使用中间,放是中间名称。...*table :关系需要使用中间,放是中间名称。

1.8K61

SQL 将数据转到一

假设我们要把 emp ename、job 和 sal 字段值整合到一中,每个员工数据(按照 ename -> job -> sal 顺序展示)是紧挨在一块,员工之间使用空行隔开。...5000 (NULL) MILLER CLERK 1300 (NULL) 解决方案 将数据整合到一展示可以使用 UNION...使用 case when 条件1成立 then ename when 条件2成立 then job when 条件3成立 then sal end 可以将数据放到一中展示,一行数据过 case...when 转换后最多只会出来一个值,要使得同一个员工数据能依次满足 case when 条件,就需要复制份数据,有多个条件就要生成多少份数据。...使用笛卡尔积可以"复制"出份数据,再这些相同数据编号(1-4),编号就作为 case when 判断条件。

5.2K30

多表间关系-一--一一-外键约束

多表间关系-一--一一-外键约束 1. 关系概述 现实生活中,实体与实体之间肯定是有关系,比如:老公和老婆,部门和员工,用户和订单、订单和商品、学生和课程等等。...之间关系分成三种: 一一 (老公和老婆) 一 (部门和员工, 用户和订单) (学生和课程) 例如: 双11当天,马哥和东哥两个用户分别在淘宝上下了一些订单,已知马哥下了...一(1:n) 例如:班级和学生,部门和员工,客户和订单,分类和商品 一原则: 在从(多方)创建一个字段,指向主表(一方)主键.我们把这个字段称之为外键. 3.... (m:n) 例如:老师和学生,学生和课程,用户和角色 多关系建原则: 需要创建第三张,中间中至少两个字段,这两个字段分别作为外键指向各自一方主键。 4....一一 一一(1:1) 在实际开发中应用不多.因为一一可以创建成一张

5.5K20
领券