我在 Postgres 中有一个带有复合主键的表。
更改另一个现有表以将复合外键添加到第一个表的复合主键的语法是什么?
我有一个已创建外键约束的表:
$table->foreign('cms_id')->references('id')->on('inventories');
Run Code Online (Sandbox Code Playgroud)
我需要更改此外键,以便它引用remote_id而不是表id中的inventories列。
我已经尝试过这样做:
public function up()
{
Schema::table('contents', function (Blueprint $table) {
$table->dropForeign('contents_cms_id_foreign');
$table->foreign('cms_id')->references('remote_id')->on('inventories');
});
}
Run Code Online (Sandbox Code Playgroud)
但是,我得到:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]:一般错误:1215 无法添加外键约束(SQL:alter tablecontentsadd constraintcontents_cms_id_foreign外键(cms_id)引用inventories(remote_id))[PDOException]
SQLSTATE[HY000]:一般错误:1215 无法添加外键约束
所以我有一个可能很愚蠢的问题,我什至不知道我是否正在尝试以正确的方式解决它,但它就是这样。
我有一个部门有几个员工,一个员工可以分配到一个部门,但不是必须的。我想在员工中使用部门号作为外键,但是不属于部门的员工呢?我可以在 fk 列中插入 null 吗?但我想知道这是否有效,因为我不能只插入引用列中存在的值吗?
这是我的相关代码
CREATE TABLE department(depno int unique not null,
primary key(depno));
CREATE TABLE employee(ID int unique not null, name not null,
depno int,
primary key(ID))
foreign key(depno)
references department(depno)
Run Code Online (Sandbox Code Playgroud)
我希望这个问题还没有被回答一百次,我只是在过去两个小时的搜索中没有找到我的答案。但我似乎无法找到有关这是否应该起作用的任何信息。
任何提示或解决方案将不胜感激!已经非常感谢了!
我有一个这样的模型:
class Publisher(models.Model):
...
class Author(models.Model):
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
class Article(models.Model):
author= models.ForeignKey(Author, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)
现在我试图从给定的出版商“pub”获取所有文章。我试过做以下事情:
pub.article_set()
pub.authot_set().article_set()
以及其他失败的尝试。那么如何在不多次访问数据库的情况下检索给定发布者的所有文章的查询集?最有效的方法是什么?
提前致谢!
对不起,如果我的问题看起来太明显了,但我仍然找不到数据库模型关系之间的逻辑。
一对一:
如果我的客户只有一个 地址,我必须将外键放在哪里?
我一开始认为把它放在顾客的桌子上会是个好主意;带有外键的一列引用地址的 id。
因为如果我需要创建一个客户,首先我需要创建一个地址。

但是我在互联网上找到了一些例子,他们在地址表中放置了一个外键,指的是客户的 id

一对多:
如果客户可以有多个地址,那么同样的问题也适用,我应该在哪个表中放置我的外键?
我正在开发一个 Django 应用程序,它将管理一些测验。这些测验由一个问题和一些可能的答案组成,我将其定义为不同的模型。
它们之间存在 OneToMany 关系,据我所知,应该使用外键建模,在这种情况下,在答案实体中。
但是,在管理来自 Django 管理站点的数据时,这非常不方便,因为我必须首先定义我的问题,然后在添加答案时查找问题以填充外键字段。
在添加问题的同时定义所有答案是否有可能,就像是多对多关系(带有 + 符号的框等)一样?
我正在尝试将表从纯 SQL 转换为 Flask-Sqlalchemy,但是可用的文档并不清楚如何执行此特定场景 - 主键也是外键。
构建表的 SQL 如下所示,它工作正常:
CREATE TABLE IF NOT EXISTS `ws`.`Perfil_Plano_Transacao` (
`pptr_perf_id` INT NOT NULL,
`pptr_tran_id` INT NOT NULL,
`pptr_plan_id` INT NOT NULL,
`pptr_dt_incluscao` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`pptr_dt_atualizacao` TIMESTAMP NULL,
PRIMARY KEY (`pptr_perf_id`, `pptr_tran_id`, `pptr_plan_id`),
INDEX `fk_Perfil_Plano_Transacao_Transacao1_idx` (`pptr_tran_id` ASC),
INDEX `fk_Perfil_Plano_Transacao_Plano1_idx` (`pptr_plan_id` ASC),
CONSTRAINT `fk_Perfil_Plano_Transacao_Perfil1`
FOREIGN KEY (`pptr_perf_id`)
REFERENCES `ws`.`Perfil` (`perf_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Perfil_Plano_Transacao_Transacao1`
FOREIGN KEY (`pptr_tran_id`)
REFERENCES `ws`.`Transacao` (`tran_id`)
ON DELETE NO ACTION
ON UPDATE …Run Code Online (Sandbox Code Playgroud) python sqlalchemy foreign-keys composite-primary-key flask-sqlalchemy
从表中删除一些行时,我在检查中收到以下错误
消息:SQLSTATE[23000]:违反完整性约束:1451 无法删除或更新父行:外键约束失败
我知道错误是由于外键失败引起的。我想显示一条错误消息,指出删除项已被使用。
我正在使用 Laravel 5.8、PHP 7.3、Mysql
有人对此有任何想法吗?
我有 2 个模型如下
class Product(models.Model):
product_name = models.CharField(max_length=100)
product_weight = models.CharField(max_length=30)
class ProductImage(models.Model):
product = models.ForeignKey(Product, on_delete=models.DO_NOTHING)
image = models.ImageField(upload_to='/images/{product_id}/', blank=True)
Run Code Online (Sandbox Code Playgroud)
如何在 ProductImage 模型中提取 product_id?
提前致谢。
我正在 starUML 中处理 ER 图,但在其中找不到 Foriegn Key 选项。我查看了应用程序中的各种设置,但找不到它。它们是插入的方法吗?另外,我在 starUML 中看到过使用 FK 的图像,但不知道如何使用。有人可以帮我吗?
foreign-keys ×10
python ×4
django ×3
mysql ×3
laravel ×2
php ×2
postgresql ×2
alter-table ×1
database ×1
django-admin ×1
erd ×1
model ×1
null ×1
sqlalchemy ×1
staruml ×1