我经常使用"ON DELETE CASCADE",但我从不使用"ON UPDATE CASCADE",因为我不太确定在什么情况下它会有用.
为了便于讨论,请看一些代码.
CREATE TABLE parent (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
CREATE TABLE child (
id INT NOT NULL AUTO_INCREMENT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE
);
Run Code Online (Sandbox Code Playgroud)
对于"ON DELETE CASCADE",如果id
删除了具有a的父级,parent_id = parent.id
则将自动删除子级中的记录.这应该没问题.
这意味着当id
更新父级时,"ON UPDATE CASCADE"会做同样的事情吗?
如果(1)为真,则意味着如果parent.id
不可更新(或永远不会更新),则不需要使用"ON UPDATE CASCADE",就像它是AUTO_INCREMENT
或者总是设置为TIMESTAMP
.是对的吗?
如果(2)不成立,在其他什么情况下我们应该使用"ON UPDATE CASCADE"?
如果我(由于某种原因)更新了child.parent_id
不存在的内容,它会被自动删除吗?
好吧,我知道,上面的一些问题可以通过程序测试来理解,但我也想知道这是否依赖于数据库供应商.
请说清楚.
什么是related_name
对on ManyToManyField
和ForeignKey
字段有用的参数?例如,给出以下代码,有什么影响related_name='maps'
?
class Map(db.Model):
members = models.ManyToManyField(User, related_name='maps',
verbose_name=_('members'))
Run Code Online (Sandbox Code Playgroud) public class Foo
{
public string FooId{get;set;}
public Boo Boo{get;set;}
}
public class Boo
{
public string BooId{get;set;}
public Foo Foo{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
当我收到错误时,我试图在Entity Framework中执行此操作:
无法确定类型"ConsoleApplication5.Boo"和"ConsoleApplication5.Foo"之间关联的主要结束.必须使用关系流畅API或数据注释显式配置此关联的主要结尾.
我已经在StackOverflow上看到了有关此错误的解决方案的问题,但我想了解术语"主要结束"的含义.
c# database-design entity-framework foreign-key-relationship
我将在下面的posgresql代码中看到2个表.第一个表学生有2列,一个用于student_name,另一个student_id是主键.在我的第二个名为tests的表中,它有4列,一个用于subject_id,一个用于subject_name,然后一个用于在一个主题中具有最高分数的学生,即最高学生.我试图让highStudent_id在我的学生表中引用student_id.这是我下面的代码,我不确定语法是否正确:
CREATE TABLE students ( student_id SERIAL PRIMARY KEY,
player_name TEXT);
CREATE TABLE tests ( subject_id SERIAL,
subject_name,
highestStudent_id SERIAL REFERENCES students);
Run Code Online (Sandbox Code Playgroud)
语法highestStudent_id SERIAL REFERENCES students
是否正确?因为我见过另一个喜欢的人highestStudent_id REFERENCES students(student_id))
请问在postgresql中创建外键的正确方法是什么?
sql postgresql foreign-keys foreign-key-relationship relational-database
如果我在SQL Server 2008中使用以下SQL命令来更新具有外键约束的表:
ALTER TABLE Employees
ADD FOREIGN KEY (UserID)
REFERENCES ActiveDirectories(id)
Run Code Online (Sandbox Code Playgroud)
UserID
在Employees
表中是我的FK专栏.我正试图UserID
在我的ActiveDirectories
表中引用它.我收到此错误:
外键'UserID'在引用表'Employees'时引用了无效的列'UserID'.
我有一个User
< Country
模特.用户属于某个国家/地区,但可能不属于任何(空外键).
我该如何设置?当我尝试插入具有空国家/地区的用户时,它告诉我它不能为空.
模型如下:
public class User{
public int CountryId { get; set; }
public Country Country { get; set; }
}
public class Country{
public List<User> Users {get; set;}
public int CountryId {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
错误: A foreign key value cannot be inserted because a corresponding primary key value does not exist. [ Foreign key constraint name = Country_Users ]"}
mapping entity-framework foreign-key-relationship ef-code-first entity-framework-4.1
我已经设置了一个包含带有外键的列的表,设置为ON DELETE CASCADE
(删除父项时删除子项)
SQL命令将其更改ON DELETE RESTRICT
为什么?(如果有子女,则无法删除父母)
为什么在多态关联中没有外键,例如下面表示为Rails模型的外键?
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end
class Article < ActiveRecord::Base
has_many :comments, :as => :commentable
end
class Photo < ActiveRecord::Base
has_many :comments, :as => :commentable
#...
end
class Event < ActiveRecord::Base
has_many :comments, :as => :commentable
end
Run Code Online (Sandbox Code Playgroud) database ruby-on-rails foreign-key-relationship polymorphic-associations
我需要对SQL Server 2008数据库进行一些更改.
这需要创建一个新表,并在新表中插入一个引用已存在表的主键的外键.所以我想在我的新tblTwo之间建立一个关系,它引用了tblOne的主键.
但是,当我尝试这样做(通过SQL Server Management Studio)时,我收到以下错误:
表'tblOne'中的列与现有主键或UNIQUE约束不匹配
我不确定这意味着什么,我想知道它是否有任何解决方法?
我在Django模型中解决关系时遇到了一些困难.
有人可以解释OneToOne,ManyToMany和ForeignKey之间的区别吗?
python django many-to-many one-to-one foreign-key-relationship
foreign-keys ×4
sql ×3
django ×2
many-to-many ×2
python ×2
c# ×1
database ×1
mapping ×1
mysql ×1
one-to-one ×1
postgresql ×1
sql-server ×1