一、django自带的ORM中可以定义表与表之间的对应关系、现比较一下各个不同关系之间数据库端的实现
1、ForeignKey(ManyToOne)关系
from django.db import models # Create your models here. class User(models.Model): name=models.CharField(max_length=30) phoneNumber=models.BigIntegerField() class Blog(models.Model): user=models.ForeignKey(User) blogName=models.CharField(max_length=16) content=models.TextField() #
CREATE TABLE `sitea_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `phoneNumber` bigint(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `sitea_blog` ( `id` int(11) NOT NULL AUTO_INCREMENT, `blogName` varchar(16) NOT NULL, `content` longtext NOT NULL, `user_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `sitea_blog_user_id_2c1e69b4_fk_sitea_user_id` (`user_id`), CONSTRAINT `sitea_blog_user_id_2c1e69b4_fk_sitea_user_id` FOREIGN KEY (`user_id`) REFERENCES `sitea_user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
2、ManyToManyField关系
from django.db import models # Create your models here. class User(models.Model): name=models.CharField(max_length=30) phoneNumber=models.BigIntegerField() class Blog(models.Model): user=models.ManyToManyField(User) blogName=models.CharField(max_length=16) content=models.TextField()
CREATE TABLE `sitea_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `phoneNumber` bigint(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; CREATE TABLE `sitea_blog` ( `id` int(11) NOT NULL AUTO_INCREMENT, `blogName` varchar(16) NOT NULL, `content` longtext NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `sitea_blog_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `blog_id` int(11) NOT NULL, `user_id` int(11) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `sitea_blog_user_blog_id_user_id_cdb4869e_uniq` (`blog_id`,`user_id`), KEY `sitea_blog_user_user_id_a960fdcf_fk_sitea_user_id` (`user_id`), CONSTRAINT `sitea_blog_user_blog_id_72f927d9_fk_sitea_blog_id` FOREIGN KEY (`blog_id`) REFERENCES `sitea_blog` (`id`), CONSTRAINT `sitea_blog_user_user_id_a960fdcf_fk_sitea_user_id` FOREIGN KEY (`user_id`) REFERENCES `sitea_user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 由上面可以看出ManyToMany 关系也是和通常的作法差不多、 加一个关联表
3、OneToOne关系
from django.db import models # Create your models here. class User(models.Model): name=models.CharField(max_length=30) phoneNumber=models.BigIntegerField() class Blog(models.Model): user=models.OneToOneField(User,default=1) blogName=models.CharField(max_length=16) content=models.TextField()
CREATE TABLE `sitea_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `phoneNumber` bigint(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `sitea_blog` ( `id` int(11) NOT NULL AUTO_INCREMENT, `blogName` varchar(16) NOT NULL, `content` longtext NOT NULL, `user_id` int(11) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `user_id` (`user_id`), CONSTRAINT `sitea_blog_user_id_2c1e69b4_fk_sitea_user_id` FOREIGN KEY (`user_id`) REFERENCES `sitea_user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
---