我试图在表格中建模树关系.例如,有"类别",类别本身可以在父类别中.
我的架构是:
id int PRIMARY KEY,
parent_id int,
name
Run Code Online (Sandbox Code Playgroud)
我的问题是,我应该将parent_id列标记为外键吗?外国意味着"外部"而不是自我参照.是否有不同类型的钥匙用于此目的?
我的问题类似于: MS SQL中的自引用约束,但我问的是另一个问题,级联不是问题.
sql database database-design foreign-keys foreign-key-relationship
我在Grails的GORM部分遇到了一些问题.我正在使用Grails 1.3.4和H2.
在数据库中,我有两个表模板和报告.在GORM级我有两个域类Template和Report;
class Template {
static hasMany = [reports: Report]
...
}
Run Code Online (Sandbox Code Playgroud)
和
class Report {
static belongsTo = [template: Template]
...
}
Run Code Online (Sandbox Code Playgroud)
默认行为似乎是当Template删除a时,删除将被级联,以便Report它所拥有的所有内容也将被删除.在数据库级别,我试图使报表中的template_id -column 为ON DELETE SET NULL外键,但这不起作用.
有没有办法覆盖级联删除?
grails h2 foreign-key-relationship relational-database grails-orm
在Oracle 10g中,是否可以为外键定义引用完整性约束以引用多个父表中的主键.
例如:
DEPT_ID
10
11
12
DEPT_ID
13
14
15
DEPT_ID
16
17
18
EMP_ID DEPT_ID
500 11
501 15
我希望EMP.DEPT_ID能够引用DEPT_AMER,DEPT_APAC和DEPT_AMER中的某个部门ID.有没有办法定义参照完整性来满足这种需求.所有3个表中的DEPT_ID都是从一个公共序列生成的,并保证是唯一的.
如果无法使用引用完整性约束,是否有更好的方法来维护此数据完整性?
我正在构建一个可能的车辆数据库,其中每个条目都有一个Make,Model,Year和Engine.
我把它分成了制表(福特,雪佛兰,宝马等)和模型(Impala,Camaro,F-150等)和年(1920,...... 2012)和发动机(327,350等).
由于我现在每个Make,Model,Year和Engine都有一个表,并且每个表都有唯一的主键,因此主"MakesModelsAndYears"表中的每一行都只由四个外键组成.
这是否过度,或者真正存储的效率高于我创建独特索引的一个大表?我对"一个大桌子"方法的关注是像1970年这样的年代会重复多次(1970年雪佛兰Impala,1969年雪佛兰Camaro等),因为它有模型甚至引擎.
谢谢你的指导!

跟进:
对于那些追随者,我将反馈结合到答案中并得出了这个模式.图像没有详细显示FK,但它们实际上是答案所暗示的:

给定以下模型:
class Post(models.Model):
title = models.CharField(max_length=200)
html = models.TextField()
class PostTag(models.Model):
post = models.ForeignKey('Post')
tag = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)
我想完成基于给定PostTag的帖子查找。因此,如果我有两个帖子A和B标记为“ foo”,则我希望能够查找带有该标签的所有帖子,并取回帖子A和B。
我认为查询看起来像以下内容:
posts = Post.objects.filter(tag=tag)
Run Code Online (Sandbox Code Playgroud)
关于从何处开始实现此目标的任何提示?
我想知道,在使用实体框架时,哪一个会产生更好的性能?
我已经读过,如果你的entites之间有外来关系,那么最好使用include over join.
如果我只是从2个不同的entites(具有外键关系)检索1行,那么如果我使用include over join会有什么不同吗?
我正在取回的记录数量是否会影响join和include之间的性能?
我正在研究一个模型类,它将代表一个家庭成员与另一个家庭成员的关系(一部分基因学特征)
我的班级是:
class FamilyLink(models.Model):
from_legacy = models.ForeignKey(Legacy)
to_legacy = models.ForeignKey(Legacy)
class Meta:
unique_together = ("from_legacy", "to_legacy")
Run Code Online (Sandbox Code Playgroud)
当我尝试迁移时,我收到以下错误消息:
CommandError:一个或多个模型未验证:archive.familylink:字段'from_legacy'的访问者与相关字段'Legacy.familylink_set'冲突.将related_name参数添加到'from_legacy'的定义中.archive.familylink:字段'to_legacy'的访问者与相关字段'Legacy.familylink_set'发生冲突.将related_name参数添加到'to_legacy'的定义中.
看来我的问题是在同一个类中有两个foreignKey都指向同一个类(在本例中是"Legacy"类).有谁知道如何解决/解决这个问题?
我很欣赏这些想法和专长.
python django many-to-many django-models foreign-key-relationship
我对Laravel很新.我正在想与Eloquent合作.
假设我有2个表:类别和产品.这两个表有一对多的关系.1类可以有很多产品.
我想返回一个JSON响应,该响应由一系列类别组成,其中每个类别都有一系列产品.它应该如下所示:
[
{"name":"Category 1", "products": [
{"name":"Product 1","price":"2.50"},
{"name":"Product 2","price":"2.50"}
]
},
{"name":"Category 2", "products": [
{"name":"Product 1","price":"1.95"},
{"name":"Product 2","price":"2.15"}
]
}
]
Run Code Online (Sandbox Code Playgroud)
楷模:
Category.php
<?php
class Category extends Eloquent{
protected $table = 'categories';
public function products(){
return $this->hasMany('Product');
}
}
Run Code Online (Sandbox Code Playgroud)
Product.php
<?php
class Product extends Eloquent {
protected $table = 'products';
public function categories(){
return $this->belongsTo('Category');
}
}
Run Code Online (Sandbox Code Playgroud)
数据库表:
create_categories_table:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCategoriesTable extends Migration {
public function up()
{
Schema::create('categories', function(Blueprint $table) …Run Code Online (Sandbox Code Playgroud) 我正在学习Ruby on Rails,我正在通过建立一个小网站来练习.我试图为一些模型建立一对多的关系,但我遇到了一些麻烦.
目前我被困住了.我有一个Users,ExpensePictures,IncomePictures模型.
用户模型
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:rememberable, :validatable
has_many :expense_picture, :income_picture
end
Run Code Online (Sandbox Code Playgroud)
ExpensePicture模型
class ExpensePicture < ActiveRecord::Base
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
IncomePicture模型
class IncomePicture < ActiveRecord::Base
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
我坚持如何真正建立这些关系.
我希望用户one to many与IncomePicture和有关系ExpensePicture
我也不确定如何处理模型中的图像文件
例如:
User
- user_id (primary key)
- user_name
ExpensePicture
- picture_id (primary key)
- user_id (foreign key)
- ExpensePictureFile
IncomePicture
- picture_id …Run Code Online (Sandbox Code Playgroud) 我有2个型号
#models
class Parent(models.Model):
name = models.CharField()
class Child(models.Model)
parentLink = models.ForeignKey(Parent)
timeStamp = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
我希望Parent模型的所有对象都具有Child模型中提到的外键和timeStamp字段中的一些过滤器.
如何反向获取对象?
它的MySQL就是这样的
SELECT Parent.name FROM Parent JOIN Child on Parent.Id = Child.parentLink WHERE Child.timeStamp > '2016-01-01 : 00.00.00'
Run Code Online (Sandbox Code Playgroud) django ×3
python ×3
sql ×3
one-to-many ×2
.net ×1
database ×1
eloquent ×1
entity ×1
foreign-keys ×1
grails ×1
grails-orm ×1
h2 ×1
join ×1
json ×1
laravel ×1
many-to-many ×1
mysql ×1
oracle ×1
primary-key ×1
ruby ×1