我有一个用户和一个文档模型;一个用户有很多文档,一个文档属于一个用户。您可以将其概括为只有一个父模型和一个子模型。
现在我正在为子模型编写单元测试,我想知道我是否也必须验证 parent_id 字段(例如 only_integer,大于零,id 存在于父表中等) - 还是 Rails 自动执行因为这些是固有的外键属性,所以对我这样做吗?
我有两个不同的表,每个表都有 20k 个条目,并且错误地将 summaryId 设为同一个表中的主键和外键,但现在我想删除也是自动增加的主键约束。当我尝试删除主键语法时,它会返回一个错误:
#1025 - 将 '.\tg#sql-a38_7f' 重命名为 '.\tg\rest_web_availability_summary_pm' 时出错(错误号:150)
我尝试了以下查询。
ALTER TABLE 'table_name' DROP PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)
如果有人有任何想法,请告诉我如何删除主键。
mysql foreign-keys primary-key foreign-key-relationship primary-key-design
我已经设置了一个系统来跟踪数据库中各种对象的审核任务。它们通过通用外键关系链接。给定一个 ObjectModerationState 对象,我必须根据最新的 StateTransisition 对象确定其状态。
该解决方案必须能够在 SimpleListFilter 中使用,以便使用 list_filter 对 list_display 进行排序。
例如给定状态 - 排队 - 已完成 - 验证
我应该能够根据 StateTransisition 对象中的最新状态值过滤 ObjectModerationState 对象。
我一直倾向于在 ObjectModerationState 上进行某种注释。
这是我所拥有的不起作用的东西。
class ObjectModerationState(models.Model):
job = models.ForeignKey(JobDescription)
object_id = models.TextField(help_text="Primary key of the model under moderation.")
content_type = models.ForeignKey(ContentType, help_text="Content type of the model under moderation.")
object = generic.GenericForeignKey()
class StateTransisition(models.Model):
state = models.ForeignKey(State)
moderation_details = models.ForeignKey("ObjectModerationState", related_name='states')
changed_by = models.ForeignKey("auth.User", related_name='+', null=False,
help_text="If you create the task, then usually this will be …Run Code Online (Sandbox Code Playgroud) 我正在尝试向我的 user_info 表添加外键约束,这是我的用户表 (user_id) 中的主键:
ALTER TABLE user_info
ADD CONSTRAINT fk_userID
FOREIGN KEY (user_id)
REFERENCES users(user_id);
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
Error starting at line 26 in command:
ALTER TABLE user_info
ADD CONSTRAINT fk_userID
FOREIGN KEY (user_id)
REFERENCES users(user_id)
Error report:
SQL Error: ORA-02298: cannot validate (CLAYBANKS.FK_USERID) - parent keys not found
02298. 00000 - "cannot validate (%s.%s) - parent keys not found"
*Cause: an alter table validating constraint failed because the table has
child records.
*Action: Obvious
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
精简版:
我有一个用于食谱的 Django 应用程序,并且想要过滤要发送到我视图中的模板的数据。我基本上希望由特定用户添加的所有接收作为上下文发送。下面的过滤返回一条错误消息invalid literal for int() with base 10: my_username。
recipes = Recipe.objects.filter(added_by = uname)
Run Code Online (Sandbox Code Playgroud)
变量uname是从模板传递过来的。另一方面,过滤request.user工作正常,但不是我想要的。
recipes = Recipe.objects.filter(added_by = request.user)
Run Code Online (Sandbox Code Playgroud)
细节:
我的模型给出(相关字段)为:
class Recipe (models.Model):
...
...
added_by = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)
其中User是现有的 Django 用户。当我在模板中调用 {{ recipe. added_by }} 时,我会根据需要获取用户名。这个用户名被传递给一个带有href="/profile/{{recipe. added_by}}"的视图,其中的视图如下所示:
def profile(request, uname):
print uname #Correct username printed
print request.user #Logged in user (not relevant, as userprofile should be visible for all)
recipes = Recipe.objects.filter(added_by = uname) #Does not …Run Code Online (Sandbox Code Playgroud) 我正在创建一个表,但出现此错误:
- 外键的引用和引用列的数量不一致。
我不知道如何解决。我认为声明 3 个外键可能有问题,但是,我不确定。
问题是什么?
Create table Trasllat
(
Data Date,
Codi_Empleat Integer,
Nom_agencia Varchar(30),
Data_fi Date,
Primary key (Data, Codi_Empleat),
Foreign key (Data) references Data on delete cascade,
Foreign key (Codi_empleat) references Empleat on delete cascade
Foreign key (Nom_agencia) references Agencia on delete cascade
);
Run Code Online (Sandbox Code Playgroud) 我认为我的标题很自我解释,但是我将在下面概述我在做什么。
一个人与一个城镇相连。这个镇与一个县相连。县与国家相连。一个国家有很多县。一个县里也有很多镇。也就是说,很多人可能来自同一个城镇。
在我的数据库中,我有一个单独的表格,用于显示人员、城镇、县和国家。为了获得完整的用户记录,我将记录集上的表 LEFT JOIN。这是我作为一个单一的人所做的工作的简化版本,分布在更多的桌子上。使用 FOREIGN 键会加快查询的执行速度吗?即使只是轻微的速度增加或更少的资源使用,我也会感兴趣。
我计划的规模非常大,因此执行时间和资源使用可能很有用。作为从数据库回来的一个人,我对多个表大约有 5-6 个连接。
编辑到目前为止的答案我想指出我正在索引每个表,使用主键和唯一键。此外,数据集可以在一个表(人)中快速添加数百万行,因此性能是关键。
我正在使用 codeigniter 3.0 和它的新手。这是我的数据库结构。如何通过单个命令访问人名。
这是我的表 1:
CREATE TABLE IF NOT EXISTS `person` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(45) NOT NULL,PRIMARY KEY (`id`));
Run Code Online (Sandbox Code Playgroud)
这是表 2:
CREATE TABLE IF NOT EXISTS `work` (`ID` int(11) NOT NULL AUTO_INCREMENT, `personname` int(11) NOT NULL, `date` varchar(220) NOT NULL, PRIMARY KEY (`ID`), FOREIGN KEY (`personname`) REFERENCES person(id))
Run Code Online (Sandbox Code Playgroud)
这是我获取数据的模型:
$query = $this->db->get('work');
return $query;
Run Code Online (Sandbox Code Playgroud)
它只返回人员 ID。但我需要这个人的名字。
我们将 Postgres 用于 Node.js 应用程序,并有一个 Sequelize 模型Entry,大致定义为:
const entriesModel = sequelize.define('Entry',
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
post_date: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: () => new Date()
}
/* ...more fields here, etc, etc... */
}, {
classMethods: {
associate: (models) => {
entriesModel.hasOne(models.Entry, {
onDelete: 'CASCADE',
foreignKey: {
name: 'parent_id',
allowNull: true
},
as: 'ParentEntry'
});
}
}
}
);
Run Code Online (Sandbox Code Playgroud)
基本上,一个条目可能有一个相应的父条目。我想检索所有条目并通过它们的父条目,但是当我尝试时:
return models.Entry.findById(id, {
include: [
{
model: models.Entry,
where: {
parent_id: …Run Code Online (Sandbox Code Playgroud) 我有两个相互矛盾的外键定义。
来自维基百科
the foreign key is defined in a second table, but it refers to the primary key in the first table.
从我的讲义中:
Foreign key does not have to match a primary key but must match a candidate key in some relation
哪个是哪个?外键是否需要引用主键或候选键?
foreign-keys ×10
mysql ×3
django ×2
filter ×2
join ×2
primary-key ×2
sql ×2
codeigniter ×1
database ×1
django-admin ×1
node.js ×1
oracle ×1
performance ×1
php ×1
postgresql ×1
python ×1
relationship ×1
sequelize.js ×1
validation ×1