📅  最后修改于: 2023-12-03 15:08:10.383000             🧑  作者: Mango
在数据库中,外键和主键是两个非常重要的概念。它们用于建立表与表之间的关系,最常见的是一对多的关系。在本文中,我们将介绍外键和主键的概念,以及它们之间的区别。
主键是表中唯一标识每一条记录的字段或一组字段。它的主要作用是保证数据的完整性和唯一性。一个表只能有一个主键,而且主键的值不能为空。
在 Python 中,我们可以通过创建一个字段并设置 primary_key=True
来指定一个字段为主键:
from peewee import *
database = SqliteDatabase('my_app.db')
class User(Model):
username = CharField(unique=True)
password = CharField()
email = CharField(unique=True)
class Meta:
database = database
table_name = 'users'
在上面的代码中,我们创建了一个名为 User
的模型,其中 username
和 email
字段被指定为主键。
外键是指一个表中的字段,它指向另一个表的主键。对于一对多的关系,在多的那一方可以添加一个指向一的那一方的主键的外键。外键字段可以为空。
在 Python 中,我们可以通过创建一个字段并设置 ForeignKeyField()
来指定一个字段为外键:
from peewee import *
database = SqliteDatabase('my_app.db')
class User(Model):
username = CharField(unique=True)
password = CharField()
email = CharField(unique=True)
class Meta:
database = database
table_name = 'users'
class Post(Model):
title = CharField()
content = TextField()
user_id = ForeignKeyField(User, backref='posts')
class Meta:
database = database
table_name = 'posts'
在上面的代码中,我们创建了一个名为 Post
的模型,其中 user_id
字段指定为外键,指向了 User
模型的主键,并添加了 backref='posts'
属性来让 User
模型能够借助 Post
模型找到对应的记录。
要想简单地理解主键和外键的区别,可以将主键看作是一个表的身份证,而外键则是一个表和另一个表的身份证关联起来。
最大的区别在于,主键保证了数据的唯一性,而外键建立了表与表之间的关系,方便进行查询和操作。
另一个区别是,在创建一个外键时,通常需要指定该外键将指向哪个主键,而主键则没有这个限制。
最后,需要注意的是,外键可以为空,但主键的值不能为空。
在本文中,我们介绍了主键和外键的概念,以及它们之间的区别。在使用 Peewee 这样的 ORM 框架时,可以方便地创建这些关系,使数据库设计更加简便。