058:表关系之一对一

表关系之一对一应用场景:

  比如一个用户表和一个用户信息表。在实际网站中,可能需要保存用户的许多信息,但是有些信息是不经常用的。如果把所有信息都存放到一张表中可能会影响查询效率,因此可以把用户的一些不常用的信息存放到另外一张表中我们叫做UserInfo。但是用户表User和用户信息表UserInfo就是典型的一对一了。

实例代码如下:

# models.py文件内容:
class User(models.Model):
    username = models.CharField(max_length=100)

    def __str__(self):
        return "<User: ID:%s, username:%s>" % (self.id, self.username)

class UserInfo(models.Model):
    addr = models.CharField(max_length=200)
    user = models.OneToOneField("User", on_delete=models.CASCADE)

    def __str__(self):
        return "<UserInfo: ID:%s, addr:%s, user_id:%s>" % (self.id, self.addr, self.user.id)    # 注意这里的数据库中user_id的书写格式

# views.py文件内容:
def index(request):
    user = User.objects.first()
    # userinfo = UserInfo(addr="nanjing")
    # userinfo.user = user
    # userinfo.save()
    print(user.userinfo)               # 通过User模型获取UserInfo模型中的数据
    return HttpResponse("success")

如果不想使用通过User模型获取UserInfo模型中的数据,可以使用上节中的方式;实例代码如下:

# models.py文件内容:
class User(models.Model):
    username = models.CharField(max_length=100)
    def __str__(self):
        return "<User: ID:%s, username:%s>" % (self.id, self.username)

class UserInfo(models.Model):
    addr = models.CharField(max_length=200)
    user = models.OneToOneField("User", on_delete=models.CASCADE, related_name="information")
    def __str__(self):
        return "<UserInfo: ID:%s, addr:%s, user_id:%s>" % (self.id, self.addr, self.user.id)

# views.py文件内容:
def index(request):
    user = User.objects.first()
    # userinfo = UserInfo(addr="nanjing")
    # userinfo.user = user
    # userinfo.save()
    # print(user.userinfo)
    print(user.information)                 # 这里的information和上面模型中的related_name="information"要对应   return HttpResponse("success")

原文地址:https://www.cnblogs.com/zheng-weimin/p/10227336.html

时间: 2024-08-30 13:05:13

058:表关系之一对一的相关文章

Hibernate多表关系配置——一对一关系映射

两个对象之间是一对一的关系,如Person-IdCard 有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联 唯一外键关联 外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系: 1.实体对象 1.1 Person实体对象 package demo.entity; /** * 人实体 * @author Don * @date:日期:2

Hibernate框架进阶(中篇)之多表关系

导读 Hibernate进阶主要分为上中下三篇,本文是中篇,主要讲解Hibernate框架中多表关系的实现.我们知道多表关系有一对一.一对多(多对一)和多对多三种关系.而1对1关系一般合并为一个表处理,所以本文主要讲解1对多和多对多关系的实现. 一.一对多关系 一对多的关系很多,比如人和籍贯就是一对多的关系,下面就用人和籍贯这个实例来展开说明. 1.数据库的实现 对于一对多关系的建立,我们通常是使用外键(foreign key)来表示.外键列添加在一对多的"多"这一方.这里用perso

2019.09.24学习整理 数据库的字段操作、多表关系、外键

目录 字段操作 多表关系 外键 一对一 无级联关系 有级联关系 一对多 多对多 数据库的字段操作.多表关系.外键 字段操作 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 modify x char(4) default ''; alter table tf1 change y m char(4) default ''; #增加 mysql>: alter table

表关系(一对一,一对多,多对多)

可以在数据库图表中的表之间创建关系,以显示一个表中的列与另一个表中的列是如何相链接的. 在一个关系型数据库中,利用关系可以避免多余的数据.例如,如果设计一个可以跟踪图书信息的数据库,您需要创建一个名为 titles 的表,它用来存储有关每本书的信息,例如书名.出版日期和出版社.您也可能保存有关出版社的信息,诸如出版社的电话.地址和邮政编码.如果您打算在 titles 表中保存所有这些信息,那么对于某出版社出版的每本书都会重复该出版社的电话号码. 更好的方法是将有关出版社的信息在单独的表,publ

0914 表与表之间的关系补充一对一关系 记录操作 关键字 多对多 子查询

1 表与表之间联系之一对一关系补充 生活中的一对一 客户表, 学员表   通过分析 一个客户只对应一个学员 一个学员只对应一个客户 所以确定关系为一对一 在mysql中通过外键来建立一对一 create table customer(id int primary key auto_increment,name char(10),phone char(11),sex char(1)); create table student(id int primary key auto_increment,n

多表关系一对一

多表关系一对一 一.多表关系 外键:建立表与表关联 的字段,通常 一个表的外键 是 另一个表的主键(唯一键也可以) 一对一关系:外键在任何一方都可以,此时外键要设置 唯一键 一对多关系:外键必须放在多的一方,此时外键值不唯一 多对多关系:一定要创建第三张表(关系表),每一个外键值不唯一,可以多个外键建立联合唯一 二.一对一无级联关系 创建数据库 # 作者详情(author_detail): id,info,address create table author_detail( id int pr

springdata_多表关系中的一对一__小案例

一.创建maven工程,引入依赖,设置配置文件 依赖和配置文件的设置可以参考,之前的博客<springdata__jpa> 二.创建实体类 1.customer类 package cn.dzl.jpa.entity; import javax.persistence.*; @Entity@Table(name = "cust_customer")public class Customer { //设置主键自增策略 @GeneratedValue(strategy = Gen

NHibernate系列文章二十:NHibernate关系之一对一(附程序下载)

摘要 NHibernate一对一关系虽然不经常碰到,但是在对于数据库结构优化的时候,经常会碰到一对一关系.比如,产品详细信息比较多的时候,可以把产品详细信息放到另一张表里面,Product主表只记录产品主要信息.这样能够显著提高产品的查询效率. 这篇文章的附件:NHibernate Demo下载. 1.建立ProductDetail表 这里将ProductId设置为主键. Product和ProductDetail之间的关系. ProductId既是主键又是外键. 创建ProductDetail

数据库表关系(一堆垛,多对多)

1.记住,永远记住:表与表之间关联的唯一手段就是外键 表与表之间相关联只能通过外键. 2.所以数据库表与表之间的,一对多,多对多关系.说白了就是怎样建立外键的关系,在哪个表建立外键. 通过外键维持各种表之间的关系. 3. 6 表与表之间的关系 l 一对一:例如t_person表和t_card表,即人和身份证.这种情况需要找出主从关系,即谁是主表,谁是从表.人可以没有身份证,但身份证必须要有人才行,所以人是主表,而身份证是从表.设计从表可以有两种方案: 在t_card表中添加外键列(相对t_use