首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用单个主键而不是复合主键对以下场景进行建模?

如何使用单个主键而不是复合主键对以下场景进行建模?
EN

Stack Overflow用户
提问于 2013-05-21 06:27:09
回答 2查看 48关注 0票数 0

假设我正在为一个田径比赛建模。主键是date、track和race_no。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Event(models.Model):
    date = models.DateField()
    race_no = models.IntegerField()     
    track = models.CharField(max_length = 4)
    temperature = models.IntegerField()

class Race(models.Model):
    date = models.DateField()
    race_no = models.IntegerField()     
    track = models.CharField(max_length = 4)
    athlete_id = models.ForeignKey(Athlete)
    finishing_pos = models.IntegerField()   

现在假设我希望为用户提供一个查找特定事件的表单。他们将输入日期、race_no和track。现在,在结果中,我希望提供事件结果和温度。通常,这对于SQL连接来说是微不足道的。Django目前对复合键的支持还不是很多。如何使用单个自动递增主键对此用例进行建模,这将对Django更友好。

EN

回答 2

Stack Overflow用户

发布于 2013-05-21 08:31:28

使用unique_together。这样,您可以在所有内容上使用递增的ids,但当将它们放在一起时,它们会形成一个唯一的键。

您可以在类的Meta类中定义unique_together

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Race(models.Model):
    date = models.DateField()
    race_no = models.IntegerField()     
    track = models.CharField(max_length = 4)
    athlete_id = models.ForeignKey(Athlete)
    finishing_pos = models.IntegerField()

    class Meta:
        unique_together = ("date", "race_no", "track")
票数 2
EN

Stack Overflow用户

发布于 2013-10-05 20:05:49

我会使用"Surrogate key",我不知道' django ',但不是重点,当一个日期因为恶劣的天气而改变时,你的数据库会出现问题(可能不是django框架),重点是永远不要使用可能改变属性作为(或在PK中)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16663483

复制
相关文章
Springboot JPA 实现复合主键
中国广东省深圳市宝安区龙华镇溪山美地 518109 +86 13113668890 +86 755 29812080 <netkiller@msn.com>
netkiller old
2018/06/26
2K1
SQL复合主键[多条件][批量]增删改查
表结构 image.png 创建表sql CREATE TABLE `users` ( `class_id` int NOT NULL, `user_id` int NOT NULL, `user_name` varchar(40) DEFAULT NULL, `money_out` int DEFAULT NULL, PRIMARY KEY (`class_id`,`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; 表数据 image
菜菜在这里
2022/05/24
1.6K0
ClickHouse复合主键调优技巧
当我们在做ClickHouse查询性能优化时,一个通用原则就是尽可能减少扫描数据的范围。这个时候索引就起到至关重要的作用。(对索引基础知识还不甚了解的可以看看我的书)
Nauu
2023/03/08
1.3K0
ClickHouse复合主键调优技巧
【说站】sql如何设置主键、如何删除主键约束
如果字段已经建好,可以用以下命令来设置主键,当然前提是id为自增字段,一般设置为int数据类型,主键建议使用bigint类型,如果是其他数据类型的话设置为主键会报错。
很酷的站长
2022/11/24
3K0
【说站】sql如何设置主键、如何删除主键约束
对复制实施主键约束
在本文中,我们介绍一个配置选项,该选项控制复制通道是否允许创建没有主键的表。这延续了我们最近在复制安全性方面的工作,在该工作中,我们允许用户强制执行权限检查和/或强制执行基于行的事件。
MySQLSE
2020/09/28
9160
对复制实施主键约束
MySQL主键约束使用
MySQL主键约束是一种用于确保表中每行数据的唯一性的限制。每个表只能有一个主键,它可以是一个或多个列。
堕落飞鸟
2023/05/11
2.6K0
基于Saas主键表生成主键id
首先需要对当前的id进行拦截操作,也即使用aop的切面Aspect对切点进行拦截,在进行新增的时候进行拦截:
路行的亚洲
2021/06/24
1.8K0
oracle 主键删除,联合主键的创建
ALTER TABLE TABLENAME DROP PRIMARY_KEY
全栈程序员站长
2022/07/13
3K0
mysql 联合主键_Mysql 创建联合主键[通俗易懂]
不知道是不是因为mysql(6.0)的版本问题,还是各版本都是这种情况,mysql中创建联合主键,联合主键列名之外不可以用单引号括上,否则出现错误,无法创建,报错是该列在表中不存在。例子代码如下:
全栈程序员站长
2022/07/04
8.3K0
mysql—如何为innodb选择主键
因为在innodb表中,每一个非主键索引的叶子节点上都会存储主键列的信息, 所以如果主键索引太大,会导致其他非主键索引页变大, 降低索引的查询效率
全栈程序员站长
2021/04/07
4.3K0
细分主键
  主键本身是很简单的,但是围绕他产生的故事就不是那么简单了。 1、 管理 这个是最重要的,没有规矩不成方圆,主键要如何管理一定要实现确定好了,甚至有必要为此写一个规范。比如是全公司采用相同的方式处理主键,还是根据项目、产品来各自管理?还是由项目组成员自行决定?这些都是需要实现说清楚的。 2、 定义 不是说“主键”这个词的定义,而是主键用什么,比如用GUID还是用int,还是年月日时分秒+流水? 3、 生成 主键用什么确定好了之后就是如何生成了。比如GUID,是在程序里生成,还是由数据库的字段默认值来生成?
用户1174620
2018/02/26
6710
Hibernate 主键介绍
Hibernate有如下主键: ---- Native: Native主键生成方式会根据不同的底层数据库自动选择Identity、Sequence、Hilo主键生成方式。特点是根据不同的底层数据库采用不同的主键生成方式。由于Hibernate会根据底层数据库采用不同的映射方式,因此,便于程序移植,项目中如果用到多个数据库时,可以使用这种方式。 ---- Assigned: Assigned方式由程序生成主键值,并且要在save()之前指定,否则会抛出异常。特点是主键的生成值完全由用户决定,与底层数据库无关。
qubianzhong
2018/08/10
6600
mysql 主键自增语句_MySQL 自增主键[通俗易懂]
每次插入一条数据,其 ID 都是比上一条插入的数据的 ID 大,就算上一条数据被删除。
全栈程序员站长
2022/07/18
10.9K0
如何为MySQL主键添加字段?
今天有个同事问了个不常见的问题,就是修改主键字段,给既定的主键添加一个字段应该用什么操作。说实话,这类操作,一般是不会发生在线上的,因为线上的表的主键,通常情况下,会建议业务用自增id值,因为自增id值既满足了主键的唯一性,又可以防止过多的数据页分裂操作,而且它的范围比较广,占用的字节数量也比较少,是一个比较合适的主键角色。
AsiaYe
2021/11/09
6.9K0
mysql联合主键
使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据
全栈程序员站长
2022/09/07
4.1K0
Mysql资料 主键
一个顾客可以使用顾客编号列,而订单可以使用订单ID,雇员可以使用雇员ID 或 雇员社会保险号。
陈不成i
2021/06/08
3.8K0
MySQL重大Bug!自增主键竟然不是连续递增
AUTO_INCREMENT=2,表示下一次插入数据时,若需要自动生成自增值,会生成id=2。
JavaEdge
2021/10/18
2.6K0
MySQL重大Bug!自增主键竟然不是连续递增
AUTO_INCREMENT=2,表示下一次插入数据时,若需要自动生成自增值,会生成id=2。
JavaEdge
2021/12/07
3.6K0
MySQL重大Bug!自增主键竟然不是连续递增
SQL---mybatis如何返回主键id
下面这个是关键:order的值是after,表示先执行insert语句,然后再选择最后一个主键,返回到实体类中。       
IT云清
2019/01/22
2K0
mysql主键自增策略_MySQL 自增主键机制
自增主键:特指在自增列上定义的主键。 自增主键的优点是让主键索引保持递增顺序的插入,避免页分裂,索引更加紧凑。
全栈程序员站长
2022/09/07
9.5K0

相似问题

复合主键场景

10

由单个列而不是复合主键连接

12

如何对包含外键的复合主键进行建模?

10

OneToMany复合主键场景

17

使用序列字段建模复合主键

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文