标签: foreign-keys

非集群外键索引推荐

我的数据库中有几个表是父子关系。例如:

CREATE TABLE [dbo].[cntnr_header] 
(
    [cntnr_id]            [dbo].[uid]     NOT NULL,
    CONSTRAINT [pk_cntnr_header] PRIMARY KEY CLUSTERED ([cntnr_id] ASC),
);

CREATE TABLE [dbo].[cntnr_content] 
(
    [cntnr_content_id]  [dbo].[uid]       NOT NULL,
    [cntnr_id]          [dbo].[uid]       NOT NULL,
    CONSTRAINT [pk_cntnr_content] 
       PRIMARY KEY CLUSTERED ([cntnr_content_id] ASC),
    CONSTRAINT [fk_cntnr_content_cntnr_header] 
       FOREIGN KEY ([cntnr_id]) 
       REFERENCES [dbo].[cntnr_header] ([cntnr_id]),
);
Run Code Online (Sandbox Code Playgroud)

如您所见,当前cntnr_id在表中的外键上没有索引cntnr_content。我运行了调优向导,实际上我看到它建议为表cntnr_content_idcntnr_id表都添加一个非聚集索引cntnr_content。我不太了解这一点,因为cntnr_content_id它已经是聚集索引。为什么会推荐这样的索引?

CREATE NONCLUSTERED INDEX [_dta_index_cntnr_content_7_821577965__K1_K2] ON [dbo].[cntnr_content]
(
    [cntnr_content_id] ASC,
    [cntnr_id] ASC
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON …
Run Code Online (Sandbox Code Playgroud)

sql-server indexing foreign-keys sql-server-2012

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

如何实现Django多选外键

这是场景.实际的对象名称被调整,但这是主意.假设我有一个颜色模型

class Color(models.Model):
    name = models.CharField(max_length=20)
Run Code Online (Sandbox Code Playgroud)

我也有一个用户模型

class User(models.Model):
Run Code Online (Sandbox Code Playgroud)

我想要做的是让用户选择多种颜色作为他们的最爱.有没有办法在单用户模型中正确存储多种颜色?

我有一个最好的想法是有一个看起来像这样的额外模型:

class UserMCColor(models.Model):
    user = models.ForeignKey('User')
    color = models.ForeignKey('color')
Run Code Online (Sandbox Code Playgroud)

并为所选择的每种喜欢的颜色添加该表的条目,然后只根据用户ID获取行.这是最好的方式吗?

python database django model foreign-keys

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

如何仅删除父表中的行,该表由子表中的Foregin键引用

我想从父表中删除行/元组,但由于它在其子表中具有FOREIGN KEY引用,因此抛出了错误消息。

但是,就我而言,我只想从父表中删除记录,并在子表中维护数据

有可能实现这一目标吗?

我知道的用法ON DELETE CASCADE,但是我想知道我描述的secenario是否有解决方案?

sql foreign-keys foreign-key-relationship

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

Django:使用来自另一个模型的值填充模型的字段(在初始化和保存时)

我有2个模型(例如)。

class A(models.Model):
    name = models.CharField()

class B(models.Model):
    a = models.ForeignKey(A)
    my_name = models.CharField()
Run Code Online (Sandbox Code Playgroud)

因此,我想创建(和更新)my_nameB实例的字段name,以及它所关联的A实例的字段(一对多关系)。

我试过了:

class B(models.Model):
    ....
    def __init__(self, *args, **kwargs):
       self.my_name = self.a.name
Run Code Online (Sandbox Code Playgroud)

但是我有错误:

AttributeError
Exception Value:    
'B' object has no attribute 'a_id'
Run Code Online (Sandbox Code Playgroud)

我认为这与Django _id为外键字段添加一个有关,因此我尝试了:

class B(models.Model):
    a = models.ForeignKey(A, db_column="a")
    ...
Run Code Online (Sandbox Code Playgroud)

但是我有同样的错误。

我是Django的新手。谢谢!

django foreign-keys django-models

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

MySQL:错误代码:1215.无法添加外键约束

我有两张桌子:

Table: utenti
Columns:
userId varchar(255) PK 
password varchar(255)

Table: agenzie
Columns:
agenziaId varchar(255) PK 
userId varchar(255)
Run Code Online (Sandbox Code Playgroud)

当我尝试在agenzie上创建外键时,会出现以下错误消息:

ALTER TABLE agenzie ADD FOREIGN KEY (userId) REFERENCES utenti(userId)  Error Code: 1215. Cannot add foreign key constraint 0.015 sec
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

谢谢.

编辑:

DROP TABLE IF EXISTS `utenti`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `utenti` (
`userId` varchar(255) CHARACTER SET latin1 NOT NULL,
`password` varchar(255) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB …
Run Code Online (Sandbox Code Playgroud)

mysql foreign-keys mysql-workbench

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

构建架构时无法添加外键约束SQL

我现在正在介绍数据库类。对于一项家庭作业,我得到了一段SQL代码,并被告知仅运行一些查询并将结果返回。问题是我什至无法构建老师给我的代码给定的架构。这是这段代码:

CREATE TABLE emp (
  name char(15),
  dno int,
  FOREIGN KEY (dno) REFERENCES dept(dno)
  ON DELETE SET NULL
  ON UPDATE CASCADE
  );

CREATE TABLE dept (
  dno int,
  location char(30)
 );

INSERT INTO emp(name,dno) VALUES
("Tom",111),
("Mary",111),
("Jack",222),
("Henry",222);

INSERT INTO dept(dno, location) VALUES
(111,"Irvine"),
(222,"LA"),
(333,"SF");
Run Code Online (Sandbox Code Playgroud)

当这运行时,我得到一个错误的说法Cannot add foreign key constraint。我尝试通过MySQL工作台和SQL Fiddle来执行此操作,这两者都会产生相同的错误。我真的不知道给我的代码有什么问题,而且在网上查看后,似乎看不到任何明显的东西。

mysql sql foreign-keys

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

如何使用SQL Server设置"自动插入"外键值?

我创建了两个表,并在它们之间创建了一个关系.

students:

create table students
(
    [StudentId] NVARCHAR(50) NOT NULL PRIMARY KEY,
    [Name] NVARCHAR(50) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

studentprofile:

create table studentprofile
(
    [Id] INT NOT NULL PRIMARY KEY IDENTITY(1, 1),
    [StudentId] NVARCHAR(50) NOT NULL,
    [Address] NVARCHAR(50) NOT NULL,
);
Run Code Online (Sandbox Code Playgroud)

和关系:

alter table studentprofile
add constraint students_studentprofile_FK 
    foreign key (StudentId) 
    references students(StudentId) 
        on delete cascade on update cascade
Run Code Online (Sandbox Code Playgroud)

但是,当我写这行时:

insert into students values('110111', 'Marik')
Run Code Online (Sandbox Code Playgroud)

StudentId(表中studentprofile)的值未自动更新.为什么?

你能告诉我如何设置StudentId(在表格中studentprofile)的值可以在我插入表格时自动插入students吗?

sql-server foreign-keys primary-key

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

什么是Oracle的默认FK行为ON DELETE?

如果我只是规定了表格的约束:

ALTER TABLE childtbl
    ADD (CONSTRAINT myfk
         FOREIGN KEY(mycol)
         REFERENCES parenttbl(mycol))
Run Code Online (Sandbox Code Playgroud)

在Oracle数据库中,如果删除行中的默认行为是什么parenttbl

  • CASCADE
  • SET NULL
  • RESTRICT
  • NO ACTION

sql oracle foreign-keys

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

django rest框架-在不更改现有代码的情况下扩展auth.user

我正在django rest框架中工作,并构建一个RESTful api从Android应用程序访问。

我想扩展用户模型并添加电话号码字段-但我有带有外键的模型到用户模型以及基于令牌的身份验证。

例如:

class Ride(models.Model):
    driver = models.ForeignKey('auth.User')
    destination=models.ForeignKey(Destination)
Run Code Online (Sandbox Code Playgroud)

显然我有默认的用户表,正如我所说的-令牌身份验证-(在注册时生成令牌,然后客户端登录 -发送用户名:密码并获得令牌登录)。

我的问题是:

如何在最小代码/模型/视图更改的情况下以最佳方式向用户添加此字段?我读了很多有关此主题的答案,只是想使用最佳选择。

------------编辑--------------

添加UserProfile之后,我在创建用户时遇到了麻烦,下面是代码:

serializers.py:

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('id', 'username', 'first_name', 'last_name', 'password', )
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User(
            first_name=validated_data['first_name'],
            username=validated_data['username'],
            last_name=validated_data['last_name']
        )

        user.set_password(validated_data['password'])
        user.save()
        user.UserProfile.phone_number = self.initial_data["phone_number"]
        return user
Run Code Online (Sandbox Code Playgroud)

型号

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    phone_number = models.CharField(max_length=15)

@receiver(post_save, sender=User)
def …
Run Code Online (Sandbox Code Playgroud)

django foreign-keys extending django-rest-framework

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

Rails 4 x postgresql:ActiveRecord :: InvalidForeignKey

在我使用的Rails 4应用程序中,postgresql我遇到了一个我似乎无法理解的错误:

Completed 500 Internal Server Error in 6ms (ActiveRecord: 1.2ms)

ActiveRecord::InvalidForeignKey (PG::ForeignKeyViolation: ERROR:  insert or update on table "comments" violates foreign key constraint "fk_rails_2fd19c0db7"
DETAIL:  Key (commentable_id)=(52) is not present in table "posts".
: INSERT INTO "comments" ("body", "commentable_id", "commentable_type", "user_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id"):
  app/controllers/comments_controller.rb:52:in `block in create'
  app/controllers/comments_controller.rb:51:in `create'
Run Code Online (Sandbox Code Playgroud)

这是来自的代码comments_controller.rb:

def create
    @commentable = load_commentable
    @comment = @commentable.comments.build(comment_params)
    @comment.user_id = current_user.id
    respond_to do |format|
      if @comment.save …
Run Code Online (Sandbox Code Playgroud)

postgresql activerecord ruby-on-rails foreign-keys ruby-on-rails-4

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