我的数据库中有几个表是父子关系。例如:
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_id和cntnr_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) 这是场景.实际的对象名称被调整,但这是主意.假设我有一个颜色模型
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获取行.这是最好的方式吗?
我想从父表中删除行/元组,但由于它在其子表中具有FOREIGN KEY引用,因此抛出了错误消息。
但是,就我而言,我只想从父表中删除记录,并在子表中维护数据。
有可能实现这一目标吗?
我知道的用法ON DELETE CASCADE,但是我想知道我描述的secenario是否有解决方案?
我有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的新手。谢谢!
我有两张桌子:
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) 我现在正在介绍数据库类。对于一项家庭作业,我得到了一段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来执行此操作,这两者都会产生相同的错误。我真的不知道给我的代码有什么问题,而且在网上查看后,似乎看不到任何明显的东西。
我创建了两个表,并在它们之间创建了一个关系.
表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吗?
如果我只是规定了表格的约束:
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?我正在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) 在我使用的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
foreign-keys ×10
django ×3
sql ×3
mysql ×2
sql-server ×2
activerecord ×1
database ×1
extending ×1
indexing ×1
model ×1
oracle ×1
postgresql ×1
primary-key ×1
python ×1