📜  外键和主键的区别——Python(1)

📅  最后修改于: 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 的模型,其中 usernameemail 字段被指定为主键。

外键

外键是指一个表中的字段,它指向另一个表的主键。对于一对多的关系,在多的那一方可以添加一个指向一的那一方的主键的外键。外键字段可以为空。

在 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 框架时,可以方便地创建这些关系,使数据库设计更加简便。