我认为它是简单外键关系的别名,但似乎不是。
你能以MySQL为例什么是关联关系?
我猜这意味着多对多关系,是真的吗?
首先,我是 db 和 sql 的真正新手。但是,我必须有表、PERSON 和 SPECIES,并且我想向表 SPECIES 添加一个外键。尝试添加外键时,我总是收到错误消息“ORA-900904:无效标识符”。我就是不知道我做错了什么,为什么它不起作用?!?!
这是我的方法:
PERSON 表和主键
create table person
(
name varchar2 (30),
firstname varchar2 (30),
persid number (8) not null
)
;
alter table person
add constraint person_pk
primary key (persid)
;
Run Code Online (Sandbox Code Playgroud)
SPECIES 表和主键
create table species
(
speciesnamelat varchar2 (30),
vartid number (8) not null
)
;
alter table Species
add constraint species_pk
primary key (vartid)
;
Run Code Online (Sandbox Code Playgroud)
这部分工作正常,但以下不起作用:
指代人的物种的外键
alter table species
add constraint species_person_fk
foreign key (persid)
references person (persid)
; …Run Code Online (Sandbox Code Playgroud) 有没有办法在教义中拥有这样的东西:
class Entity {
/**
* @Column(name="related_entity_id")
*/
private $relatedEntityId;
/**
* @ManyToOne(targetEntity="RelatedEntitiy")
* @JoinColumn(name="related_entity_id", referencedColumnName="id")
*/
private $relatedEntity;
}
Run Code Online (Sandbox Code Playgroud)
我想做的事情是这样的:
调用Entity::setRelatedEntityId($someId),并持久化实体,并通过调用Entity::getRelatedEntity()让实体返回相关实体。
相关实体是从严格限制的表中选择的,它永远不会在运行时动态增长,因此相关实体 id 的数量是有限的。
在创建新实体时,我想设置相关实体 id,但不必从数据库中获取整个相关实体。
就我可以测试这一点而言,它不起作用,因为如果我设置了 relatedEntityId 而不是 relatedEntity,Doctrine 会自动将 related_entity_id 列设置为 null,因为基本上没有建立任何关系。
我也试过做这样的事情:
删除 relatedEntityId 属性,并使用
Entity::setRelatedEntity(new RelatedEntity($relEntId))
Run Code Online (Sandbox Code Playgroud)
RelatedEntity 的构造函数将设置 id,但不会设置其他值。我不想保留相关实体(它的值已经在数据库中为给定的 $relEntId 设置),但这次 Doctrine 在刷新时发出错误信号,因为它有一个非持久化的实体。
基本上,我想要做的是创建一个关系,除了相关实体的 Id 之外什么都不知道。如果有其他方法可以做到这一点,请分享。
提前致谢
编辑:
我找到了解决方法。由于相关实体将是一组有限的不可变对象,我已经完成了以下操作:
我会把这个问题留待一两天,以防万一有人想出更好的办法。
这些是我的课程:
public class Post : IPost
{
public int Id { get; set; }
public virtual int[] DuplicateOf { get; set; }
public virtual ICommentInfo[] Comments { get; set; }
}
public class CommentInfo : ICommentInfo
{
public virtual string Author { get; set; }
public virtual int Id { get; set; }
public virtual string Text { get; set; }
public virtual int PostId{ get; set; }
[ForeignKey("PostId")]
public virtual Post Post { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
将此 CommentConfiguration …
foreign-key-relationship code-first navigation-properties ef-code-first entity-framework-5
我有一个包含大约50个表的数据库.
假设我有一个名为parent的表,其中包含id主键和24个关于这个父表的近似子表.
我没有用过删除级联.我已经搜索了关于做连接可以在所有子表中执行删除.但加入20-30桌?太多了.
如果父项被删除,请告诉我有没有其他解决办法删除所有这些子行.
mysql sql parent-child foreign-key-relationship cascading-deletes
我试图通过外键在两个表字段之间创建关系,但在文档或 stackoverflow 上的相关线程中的示例失败。这是我的代码:
class User(BaseModel):
""" Field Types """
user_id = PrimaryKeyField()
username = CharField(25)
role = ForeignKeyField(User, to_field='role_id')
class Meta:
db_table = 'users'
class User(BaseModel):
""" Field Types """
role_id = PrimaryKeyField()
rolename = CharField(25)
class Meta:
db_table = 'roles'
Run Code Online (Sandbox Code Playgroud)
to_field 指的是我的代码片段中等效表“users”中的相关字段。在 peewee 的文档中,我看到 related_names 作为参数,它引用用户模型中不存在的字段推文。
class User(Model):
name = CharField()
class Tweet(Model):
user = ForeignKeyField(User, related_name='tweets')
content = TextField()
Run Code Online (Sandbox Code Playgroud)
希望有人可以解释这个语法。
我在 MySQL 中有两个表,命名manuals和library. 两者都可以上传文件,所以我制作了第三个表,名为files. 在文件中,我有一列 parent_id。我可以将 parent_id 设为手册和库中的外键吗?
我正在使用 Laravel (4.2) 并尝试过这个,但它不起作用:
$table->integer('parent_id')->unsigned();
$table->foreign('parent_id')->references('id')->on('library');
$table->foreign('parent_id')->references('id')->on('manuals');
Run Code Online (Sandbox Code Playgroud) 假设我的 models.py 中有以下内容:
class Book:
pass
class Part:
book = models.ForeignKey(Book)
class Chapter:
part = models.ForeignKey(Part)
number = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
我想要做
book = Book.objects.get(id=someID)
chapters = Book.chapters.get(number=4)
Run Code Online (Sandbox Code Playgroud)
什么是干净的方法?我在书本课上想到了经理,但它似乎不适用于这种情况。
当然,我可以在课堂书籍上实现 get_chapters 方法,但我想避免这种情况。
有任何想法吗 ?
不确定这个问题的正确标题应该是什么.我有以下架构:
我试图在Matters和WorkItems之间创建以下关系
Matter.unbilled_work_items = orm.relation(WorkItem,
primaryjoin = (Matter.id == WorkItem.matter_id) and (WorkItem.line_item_id == None),
foreign_keys = [WorkItem.matter_id, WorkItem.line_item_id],
viewonly=True
)
Run Code Online (Sandbox Code Playgroud)
抛出:
AttributeError: '_Null' object has no attribute 'table'
Run Code Online (Sandbox Code Playgroud)
这似乎是说,primaryjoin中的第二个子句返回一个类型为_Null的对象,但它似乎期待具有"table"属性的东西.
这似乎对我来说应该是非常简单的,我错过了一些明显的东西吗?
更新
答案是将primaryjoin线路更改为:
primaryjoin = "and_(Matter.id == WorkItem.matter_id, WorkItem.line_item_id == None)"
Run Code Online (Sandbox Code Playgroud) 我试图强制用户的地址信息中的州/省和国家名称来自我列出国家和州/省的一组表格.为了做到这一点,我尝试运行这样的alter table命令......
ALTER TABLE User
ADD FOREIGN KEY (stateProvince,country)
REFERENCES `StateProvince`(`name`,`countryName`);
Run Code Online (Sandbox Code Playgroud)
然后我收到这条消息......
使用外键约束创建表'realtorprint_dev/#sql-d5c_3d'失败.引用的表中没有索引,其中引用的列显示为第一列.
有没有人知道如何处理此错误消息?
这是州和国家表的创建......
CREATE TABLE Country (
name varchar(40) NOT NULL,
abbreviation varchar(4) NOT NULL,
PRIMARY KEY (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE StateProvince (
countryName varchar(40) NOT NULL,
name varchar(100) NOT NULL,
abbreviation varchar(3) NOT NULL,
PRIMARY KEY (countryName,name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
alter table StateProvince
add constraint FK_StateProvince_Country
foreign key (countryName)
references Country (name);
Run Code Online (Sandbox Code Playgroud)
现在对于用户表...
create table realtorprint_dev.user (
id bigint not null,
created datetime, …Run Code Online (Sandbox Code Playgroud) mysql ×3
python ×3
sql ×3
orm ×2
associations ×1
code-first ×1
database ×1
django ×1
doctrine-orm ×1
foreign-keys ×1
laravel ×1
mysql5 ×1
nested ×1
oracle ×1
parent-child ×1
peewee ×1
php ×1
sqlalchemy ×1