多表方案:
    如何确定表关系呢?
    表关系是在2张表之间建立的,没有超过2个表的情况。
    那么相互之间有2条关系线,先来判断一对多的关系。
    如果其中一张表的记录能够对应另外一张表的多条记录,那么关系线成立!
    
    如果只有一条线成立,那么就是一对多的关系。
    如果有2条线成立,那么就是多对多的关系。
    
    比如book和publish。一本书不能对应多个出版社(常规是这样的,否则就盗版了),那么不成立。
    一个出版社可以对应多本书,关系线成立。所以book和publish表的关系是一对多的关系
    
    多对多的关系,就是2张表互相对应多条记录。
    比如book和author。一本书可以有多个作者,一个作者可以写多本!
    
    一对一的关系,就很简单了,彼此唯一。
    比如author和authordetail是一对一的关系。
    
    
    一对多:
        book和publish表的关系是一对多的关系
    
        一旦确定一对多的关系:在多的表中创建关联字段
            # 与Publish建立一对多的关系,外键字段建立在多的一方
            publish=models.ForeignKey(to="Publish",to_field="id",on_delete=models.CASCADE)
            #创建的字段名为publish_id。它会自动加_id后缀
    
    多对多: 
        book和author是多对多的关系
        
        一旦确定多对多的关系:创建第三张关系表
            # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
            authors=models.ManyToManyField(to="Author")
            #注意:表名为应用名+book类名小写+authors,也就是book_authors。
            #它只有3个字段,分别是主键id,book_id,author_id。
            #book_id和author_id分别表示book表和author表的主键id
        
    一对一:
        author和authordetail是一对一的关系
        
        一旦确定一对一的关系 : 创建关联字段(任意一张表创建都可以)
        #但是一般,我们会判断谁是重要的,谁是次要的。在重要的表上面创建关联字段!比如author
        #由于authordetail表是author表的延伸,所以在author表创建关联字段
        # 与AuthorDetail建立一对一的关系
        ad=models.OneToOneField(to="AuthorDetail",to_field="id",on_delete=models.CASCADE,)
        #创建的字段名为ad_id,它会自动加_id后缀。一对一关联字段,必须设置唯一属性!
View Code

相关文章: