标签: foreign-keys

Laravel 5 迁移 - 外键约束失败

我在运行迁移时遇到问题。我有一个包含一些表的 mysql 数据库。具体表是product_blender。表中的一些字段是这样的:

  • 身份证(PK)
  • area_id (FK)
  • 居民(varchar)
  • heat_type_id (FK)
  • ...

现在我想创建另一个名为installateur_types. 该表需要包含一个PK和一个varchar 字段。我还想在表中创建一个FKproduct_blender到我新创建的表的ID

这就是我所做的:

创建迁移以创建表:

public function up()
{
    Schema::create('installateur_types', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('type');
    });
}

public function down()
{
    Schema::drop('installateur_types');
}
Run Code Online (Sandbox Code Playgroud)

运行迁移,这是成功的。表是用正确的字段创建的。

然后我创建了迁移以将 FK 字段添加到 product_blender 表中

public function up()
{
    Schema::table('product_blenders', function ($table) {
        $table->integer('installateurtype_id')->unsigned();
        $table->foreign('installateurtype_id')->references('id')->on('installateur_types')->onDelete('cascade');
    });
}

public function down()
{
    //
}
Run Code Online (Sandbox Code Playgroud)

当我现在运行迁移时,出现以下错误: 在此处输入图片说明

我究竟做错了什么?

mysql database foreign-keys laravel laravel-5

0
推荐指数
1
解决办法
2423
查看次数

制作多态 ActiveRecord 关联的正确方法

我有一个User模型和一个Dispute模型。争议包含涉及用户的列表,以及“原告”和“被告”。我希望能够做到这一点:

Dispute.first.users
#[<User 1>, <User 2>]

Dispute.first.accuser
#<User 1>

Dispute.first.defendant
#<User 2>
Run Code Online (Sandbox Code Playgroud)

所以这是我的模型:

class Dispute < ApplicationRecord
  has_and_belongs_to_many :users
  belongs_to :accuser,    polymorphic: true
  belongs_to :defendant,  polymorphic: true
end
class User < ApplicationRecord
  has_and_belongs_to_many :disputes

  has_one :user, as: :accuser
  has_one :user, as: :defendant
end
Run Code Online (Sandbox Code Playgroud)

迁移:

class CreateDisputes < ActiveRecord::Migration[5.0]
  def change
    create_table :disputes do |t|
      t.references :accuser, polymorphic: true, index: true
      t.references :defendant, polymorphic: true, index: true
    end
  end
end
class CreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table …
Run Code Online (Sandbox Code Playgroud)

ruby postgresql activerecord ruby-on-rails foreign-keys

0
推荐指数
1
解决办法
78
查看次数

如何在保存实例之前获取 django 模型实例的 pk

我正在尝试使用上传图像 models.ImageField(upload_to=upload_location)

def upload_location(instance,filename):
    print("%s/%s"%(instance.id,filename))
    return "%s/%s" %(instance.id,filename)
Run Code Online (Sandbox Code Playgroud)

但它给出了"GET /media/None/image_qacfEsv.jpg HTTP/1.1" 我尝试使用 slug 字段它工作正常但既不工作id也不pk工作我想使用 obj ID 来命名图像的文件夹,但它none在 id 属性中给出的是我的文件

    def upload_location(instance,filename):
    print("%s/%s"%(instance.id,filename))
    return "%s/%s"%(instance.id,filename)

class Post(models.Model):
    draft = models.BooleanField(default=False)
    publish = models.DateField(auto_now=False,auto_now_add=False)
    user = models.ForeignKey(settings.AUTH_USER_MODEL,default=1)
    slug = models.SlugField(unique=True)
    title = models.CharField(max_length=120)
    image = models.ImageField(upload_to=upload_location,
                          null=True,blank=True,
                          width_field="width_field",
                          height_field="height_field")
    height_field = models.IntegerField(default=0)
    width_field = models.IntegerField(default=0)
    content = models.TextField()
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

python database django foreign-keys

0
推荐指数
1
解决办法
2126
查看次数

Laravel 5.5 不能掉外来

我的trophies表:

public function up()
{
    Schema::create('trophies', function (Blueprint $table) {
        $table->increments('id');

        $table->integer('tournament_id')->unsigned()->nullable();
        $table->foreign('tournament_id')
            ->references('id')
            ->on('tournaments')
            ->onUpdate('cascade')
            ->onDelete('cascade')
        ;

        $table->integer('season_id')->unsigned()->nullable();
        $table->foreign('season_id')
            ->references('id')
            ->on('seasons')
            ->onUpdate('cascade')
            ->onDelete('cascade')
        ;

        $table->integer('user_id')->nullable()->unsigned();
        $table->foreign('user_id')
            ->references('id')
            ->on('users')
            ->onUpdate('cascade')
            ->onDelete('cascade');
        ;

        $table->integer('team_id')->nullable()->unsigned();
        $table->foreign('team_id')
            ->references('id')
            ->on('teams')
            ->onUpdate('cascade')
            ->onDelete('cascade')
        ;
        $table->timestamps();
    });
}
Run Code Online (Sandbox Code Playgroud)

现在我想删除外键 season_id

public function up()
{
    Schema::table('trophies', function (Blueprint $table) {
        $table->dropForeign(['season_id']);
    });
}
Run Code Online (Sandbox Code Playgroud)

当我运行 php artisan migrate 时,我收到下一个错误:

In Connection.php line 664:

  SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'trophies_season_id_foreign'; check that column/key …
Run Code Online (Sandbox Code Playgroud)

foreign-keys laravel

0
推荐指数
1
解决办法
2842
查看次数

在 Django 中,给定一个模型实例,如何确定foreignkey字段是否已完全水合?

语境:

我维护遗留的 Django 代码。在许多情况下,我的代码接收多个模型对象,每个模型对象都有一个ForeignKey或代表相同数据实体的手动缓存属性。因此所涉及的数据实体不会改变。但是,并非我收到的所有对象都曾经访问过这些foreignkey字段或缓存的属性,因此数据可能不会出现在这些对象上,尽管它会在第一次访问时延迟加载。

我不容易访问/控制声明模型的代码。

我想找到我拥有的任何一个具有已准备好的缓存的对象,这样我就可以避免访问数据库来检索我想要的数据(如果没有,我会在必要时这样做)。这是因为该数据的获取过于频繁,导致性能问题。

Django 1.6,Python 2.7。

问题

我可以询问我们手动缓存的字段,并且internal_is_cached(instance, 'fieldname')无需运行查询。但是,我无法对ForeignKey字段执行此操作。

假设我在 Django 中有一个模型类,Foo如下所示:

class Foo(models.Model):
    bar = models.ForeignKey('BarModel')
Run Code Online (Sandbox Code Playgroud)

问题

Foo如果我从某处获取模型的实例,但我不知道是否bar曾经调用过它,或者是否已急切地获取它,我如何确定读取instance.bar是否会查询数据库?

换句话说,我想从外部确定任意模型是否具有针对给定的内部缓存ForeignKey,而关于该模型的状态或来源的其他知识为零。

我尝试过的

  • 我尝试使用 Django 缓存进行模型缓存来解决该问题。相关数据的获取过于频繁,以至于对我们的缓存系统造成了不可持续的负载。

  • 我从这个问题尝试了各种解决方案。它们适用于修改后的模型,但似乎不适用于尚未突变的模型——我对模型的“延迟加载”状态感兴趣,而不是“待修改”状态。其中许多解决方案也不适用,因为它们需要更改模型继承或行为,我希望尽可能避免这种情况(政治)。

  • 这个问题看起来很有希望,但它需要控制模型的初始读者过程。我的代码接收到的模型对象可以来自任何地方。

    • 在测试中,对[本文]中描述的事后缓存启动进行相反的操作对我有用。然而,它依赖于_default_manager模型对象的内部方法,众所周知,这对于我们在生产中的一些(高度定制的)模型对象来说是不准确的字段引用。其中一些非常奇怪,如果可能的话,我更愿意坚持使用记录的(或者至少是稳定的并且不经常被绕过的)API。

python django orm caching foreign-keys

0
推荐指数
1
解决办法
1584
查看次数

同时多个表的外键

我在软件中使用 Firebird 数据库并发现了一个问题

\n\n

我有两张桌子,适合两种不同类型的客户:

\n\n
clientM(\n\n    rfcM varchar(12) primary key\n\n    some other data  \n\n)\n\nclientF(\n\n    rfcF varchar(13) primary key\n\n    some other data\n\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

(长度是固定的,因为它是 M\xc3\xa9xico 中我期望用户输入的数据的标准)

\n\n

问题来了,我需要创建第三个表:

\n\n
clientPayment(\n\n    rfcClient varchar(13)\n\n    some other data\n\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且该字段必须有一个引用 clientM.rfcM 和 clientF.rfcF 的外键,因此我可以使用同一个表来存储来自两种类型客户的付款

\n\n

我可以让第三个表不带外键,但希望添加一个并避免用户输入不正确的数据

\n

sql firebird foreign-keys

0
推荐指数
1
解决办法
6237
查看次数

为引用来自 SQL Plus 中不同表的多个主键的外键添加约束?

我是学习 SQL 的初学者,在实现这个概念时遇到了麻烦。

假设您创建了以下三个表:

CREATE TABLE dogOwner(
 ownerNo VARCHAR(8) CONSTRAINT ownerNo_pk1 PRIMARY KEY,
 ownerName VARCHAR(10)
);

CREATE TABLE catOwner(
 ownerNo VARCHAR(8) CONSTRAINT ownerNo_pk2 PRIMARY KEY,
 ownerName VARCHAR(10)
);

CREATE TABLE petsAdopted(
 petNo VARCHAR(8) CONSTRAINT petNo_pk PRIMARY KEY,
 ownerNo VARCHAR(8) CONSTRAINT ownerNo_fk1 REFERENCES dogOwner(ownerNo)
                    CONSTRAINT ownerNo_fk2 REFERENCES catOwner(ownerNo)
);
Run Code Online (Sandbox Code Playgroud)

你如何正确地为外键 ownerNo 创建约束,它从另外两个表中引用 ownerNo?

sql oracle ddl foreign-keys

0
推荐指数
1
解决办法
37
查看次数

如何使用mysql确定外键的基数

我陷入了一个问题,我必须找到使用mysql的表之间关系的基数.关注这篇文章
MySQL:如何以编程方式确定外键关系?
我找到了与我的表和外键相关的所有表.现在我也想找到关系的基数,即一对一,一对多或多对多.任何想法或片段都将受到高度赞赏

mysql foreign-keys cardinality relationship

-1
推荐指数
1
解决办法
2452
查看次数

辅助键,外键和主键之间的区别?

我试着用谷歌搜索找到这个,但我找不到它们之间的比较。如果有人能告诉我将是一个很大的帮助。

sql foreign-keys primary-key

-1
推荐指数
1
解决办法
2万
查看次数

在外键字段中插入空字符串值

\'\'尝试在外键字段中插入带有 a 的值时出现错误。

\n

我使用 PostgreSQL v10。

\n

我的sql代码:

\n
CREATE TABLE meas_name (\n    nopol varchar(2) NOT NULL,\n    cchim varchar(10) NOT NULL,\n    ncon varchar(30) NOT NULL,\n    PRIMARY KEY (nopol)\n);\n\nCREATE TABLE main_device (\n    ntypapp smallint NOT NULL,\n    no_main smallint NOT NULL,\n    lib_main varchar(25),\n    nopol varchar(2),\n    no_chrono smallint,\n    PRIMARY KEY (no_main,ntypapp)\n);\n\nALTER TABLE main_device ADD CONSTRAINT fk_maindevice_measname FOREIGN KEY (nopol) REFERENCES meas_name(nopol) ON DELETE NO ACTION NOT DEFERRABLE INITIALLY IMMEDIATE;\n \n
Run Code Online (Sandbox Code Playgroud)\n

当我用已知的设备插入测量的东西时,出现此错误:

\n
insert into main_device values \n(1, 1, \'TST LASER\',\'\',1578)\n\nERROR: …
Run Code Online (Sandbox Code Playgroud)

sql postgresql foreign-keys

-1
推荐指数
1
解决办法
1922
查看次数

ORA-02291 错误。不确定是什么导致了问题

一切运行良好。结束部分给出ORA-02291错误。不确定是什么导致了该错误,因为我认为所有代码都运行良好。这是在 Oracle SQL developer 中制作的,错误消息是 ORA-02291。我希望有人能给我一个答案。请帮我。

代码:


CREATE TABLE comm_customer
( 
Customer_Id int NOT NULL,
Customer_Name VARCHAR(50) NOT NULL,
Address VARCHAR(255) NOT NULL,
Billing_Address VARCHAR(255) NOT NULL,
city VARCHAR(255) NOT NULL,
country VARCHAR(255) NOT NULL, 
phone INT NOT NULL,
primary key(Customer_id)
);

CREATE TABLE comm_orders
(
order_Id INT NOT NULL,
Customer_id INT NOT NULL,
order_date DATE NOT NULL,
amount DECIMAL(5,2) NOT NULL,
Order_status VARCHAR(20) NOT NULL,
primary key(order_id),
FOREIGN KEY (customer_id ) REFERENCES comm_customer(customer_id)
);

CREATE TABLE comm_products …
Run Code Online (Sandbox Code Playgroud)

sql oracle constraints foreign-keys

-1
推荐指数
1
解决办法
50
查看次数

如何在 SQL 中查找外键添加到表中的最早时间

我的问题是我有一个外键列表及其添加日期,如下所示:

+----------------+---------------+
|  Foreign Key   |  Date         |
+----------------+---------------+
|  4             |  2022-05-25   |
|  5             |  2022-05-30   |
|  4             |  2022-05-30   |
+----------------+---------------+
Run Code Online (Sandbox Code Playgroud)

我要求的是只显示最早的日期,所以我不想要第二个“4”,因为它是在第一个日期之后创建的。有没有办法可以只显示每个键的最早日期?像这样:

+----------------+---------------+
|  Foreign Key   |  Date         |
+----------------+---------------+
|  4             |  2022-05-25   |
|  5             |  2022-05-30   |
+----------------+---------------+
Run Code Online (Sandbox Code Playgroud)

sql foreign-keys

-1
推荐指数
1
解决办法
248
查看次数

获取一个表到第n级的所有从属表的所有外键

我有一个名为MemberColumn Name的表Member_Id

该表被超过23个其他表称为主表和Member_Id外部列。

现在,这23个表也具有主键,有些还可以用作其他表的主表。

所以我想获取所有依赖于Table的依赖表的外键Member

我的目标是截断Member具有外键的表。我不能使用Delete,因为这些表包含更多数据,因此删除数据可能需要花费一些时间。

例如:-

会员->会员编号

Member-Contact与连接Member表使用Member_ID,主键Contact_No Member_Population与连接Member表使用Member_ID,主键population_seq_no

... 23更多

这些Member-ContactMember_Population23多了也有与其他表的外键依赖的表。

因此,在截断之前,我需要先删除所有外键,然后截断所有这些从属表,然后还原这些外键。

直到现在,我编写了此查询,该查询可获取一个表的所有外键

SELECT  ROW_NUMBER() Over(Order BY f.parent_object_id) as RowID,
        OBJECT_NAME(f.parent_object_id) TableName,
        COL_NAME(fc.parent_object_id,fc.parent_column_id) ColName,
        f.name as FKConstraintName,
        COL_NAME(fc.referenced_object_id,fc.referenced_column_id) as ReferenceColName
--INTO  #temp_ReferenceContstraints     
FROM    sys.foreign_keys AS f
        INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
        INNER JOIN sys.tables t ON t.OBJECT_ID = fc.referenced_object_id
WHERE   OBJECT_NAME (f.referenced_object_id) …
Run Code Online (Sandbox Code Playgroud)

sql sql-server truncate foreign-keys sql-server-2008

-7
推荐指数
1
解决办法
1849
查看次数