我正在阅读CJ Date的SQL和关系理论:如何编写准确的SQL代码,他认为位置查询很糟糕 - 例如,这INSERT
:
INSERT INTO t VALUES (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
相反,您应该使用这样的基于属性的查询:
INSERT INTO t (one, two, three) VALUES (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
现在,我理解第一个查询与关系模型不一致,因为元组(行)是无序的属性集(列).我无法理解第一个查询中的伤害位置.谁可以给我解释一下这个?
sql tuples relational-algebra database-relations relational-model
class Book(models.Model):
# fields
class Chapter(models.Model):
book = models.ForeignKey(Book)
class Page(models.Model):
chapter = models.ForeignKey(Chapter)
Run Code Online (Sandbox Code Playgroud)
我想要书A的所有页面,可能没有骑自行每一章来获取页面.
book = Book.objects.get(pk=1)
pages = book.chapter_set.page_set #?!?
Run Code Online (Sandbox Code Playgroud) 这就是我想要做的:
我有2张桌子......
CREATE TABLE `parent` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`data` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
CREATE TABLE `child` (
`parent_id` int(11) DEFAULT NULL,
`related_ids` int(11) DEFAULT NULL,
KEY `parent_id` (`parent_id`),
KEY `related_ids` (`related_ids`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
然后是一个约束:
ALTER TABLE `parent` ADD FOREIGN KEY (`id`) REFERENCES `child` (`parent_id`);
Run Code Online (Sandbox Code Playgroud)
如您所见,表parent具有自动递增的主键"id",该主键也用作子表的外键.
现在我想在父表中插入一条记录,如下所示:
INSERT INTO parent SET DATA="abc";
Run Code Online (Sandbox Code Playgroud)
它失败了,错误:
无法添加或更新子行:外键约束失败(
myschema
.parent
,CONSTRAINTparent_ibfk_1
FOREIGN KEY(id
)REFERENCESchild
(parent_id
))
我知道它失败了,因为它没有在子表中找到引用的记录.如果我开始在子表中创建一个记录,将它的parent_id设置为1,然后重置父表的自动增量计数器(以便下一个插入将具有id = 1),它的工作原理!但那不是解决方案.
如果子表中没有相关的行,我没有看到插入阻塞的效用... …
mysql constraints foreign-keys database-relations auto-increment
场景是:
帐户如何为其他帐户评分?这导致帐户上有两个列表.我评价的人和评价我的人.(my_ratings和ratings_given)
这归结为:
如何在同一实体中使用多个1-N关系在Mongoid中工作?
在Mongoid的文档中,它说你可以使用has_many
和belongs_to
链接实体.
我目前在账户上有这个
has_many :ratings, :as => "my_ratings"
has_many :ratings, :as => "ratings_given"
Run Code Online (Sandbox Code Playgroud)
这个评分:
belongs_to :user, :as => 'Rater'
belongs_to :user, :as => 'Ratie'
Run Code Online (Sandbox Code Playgroud)
文档没有涵盖这种情况,所以我认为你必须用:作为参数区分两者.
这甚至是遥控器吗?
我目前正在开发一个Django站点,用户可以在其中拥有多个"帐户",这样他们就可以在通过站点进行交互时在不同的公共配置文件之间无缝切换.我正在设计的内容可能会吸引每人多次注册(并且不会气馁),我只想提供这样一种方式,即用户可以将配置文件捆绑在一起,轻松切换并且只需要记录一次.
到目前为止我想到的两种方法包括:
一个(User
型号+ SiteProfile
型号)对和PublicProfile
每个人的许多模型.AUTH_PROFILE_MODULE
设置为指向SiteProfile
模型.这个问题是我不能轻易使用每个对象的权限:这些权限将设置在User
对象而不是公共配置文件上,因此当用户伪装成"公共配置文件"时,查看"PublicProfileA"页面的权限也将被应用. "PublicProfileB".
每人一个Account
模型和许多(User
模型+ UserProfile
模型)对.AUTH_PROFILE_MODULE
设置为指向UserProfile
模型.这将具有按预期工作的权限的额外好处,并且我可以简单地具有自定义后端,其将通过如果用户当前Account
以与外键具有相同对象的另一用户登录来切换用户.通过读取Account
对象上的字段会发生身份验证,这意味着password
每个User
对象上的字段都将被浪费.
如上所述,但是继承Account
自User
.我曾被强烈反对这一点(原因尚不清楚).
这有什么陷阱或更好的方法吗?最终,我应该使用内置User
模型作为每人一个模型来识别一组面向公众的配置文件(这些配置文件将FK返回到User
对象),或者将其用作配置文件本身,链接回来Account
为每个人一个对象?
django database-relations django-models django-authentication
我想要完全相同的东西django.contrib.contenttypes.generic.GenericForeignKey
,而OneToOne
不是ForeignKey
.我认为一个简单(虽然略微不优雅)的解决方法是添加unique=True
到相关领域,但是那个borks.
我无法弄清楚如何设置一个创建新的表单,Study
同时还创建相关的StudySubject
和Facility
.的user_id
,facility_id
并且study_subject_id
必须是可用于创建Study
对象,你可以在数据库中关系模型看.
这是迁移的studies
.其他表不包含外键.
def self.up
create_table :studies do |t|
t.references :user
t.references :facility
t.references :subject
t.date "from"
t.date "till"
t.timestamps
end
add_index :studies, ["user_id", "facility_id", "subject_id"], :unique => true
end
Run Code Online (Sandbox Code Playgroud)
模型定义了以下关联.
# user.rb
has_many :studies
# subject.rb
has_many :studies
# facility.rb
has_many :studies
# study
belongs_to :user
belongs_to :subject
belongs_to :facility
Run Code Online (Sandbox Code Playgroud)
问题
1)has_many
和belongs_to
定义是否正确?
2)如何study
使用accepts_nested_attributes_for创建一个?
3)研究应该只属于一个用户.我是否需要将其添加user_id
到每个其他对象中以存储关联? …
database-relations associations nested-forms ruby-on-rails-3
我正在尝试学习MySQL,所以我创建了一个小博客系统.
我在MySQL中有3个表:
posts
:
id | title
----------------
1 | Post Title 1
2 | Post Title 2
Run Code Online (Sandbox Code Playgroud)
categories
:
id | title | parent
--------------------------------
10 | category10 | 0
11 | category11 | 0
12 | category12 | 10
Run Code Online (Sandbox Code Playgroud)
post_category_relations
:
id | post_id | category_id
----------------------------------
1 | 1 | 10
2 | 2 | 12
3 | 3 | 11
Run Code Online (Sandbox Code Playgroud)
每个帖子可以有多个类别,它们的关系存储在post_category_relations中:
因此,当我访问index.php?category = 10时,我想让每个帖子都category10
包含与其子文件夹中的帖子相关的内容category12
.
PHP中我未完成的片段
$folder_id = $_GET["category"]; // Get Category ID …
Run Code Online (Sandbox Code Playgroud) 在Laravel文档中,它说你可以使用这种语法来查询对象关系,只获得至少有一个Comment的帖子:
$posts = Post::has('comments')->get();
Run Code Online (Sandbox Code Playgroud)
我正在尝试类似的东西,我只想获取至少有一个关系对象的对象.这是我的两个班级:
class Movie extends Eloquent {
protected $table = 'movie';
public function matches() {
return $this->hasMany("Match");
}
}
class Match extends Eloquent {
protected $table = 'match';
public function movie() {
return $this->belongsTo("Movie");
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我打电话时
$movies = Movie::has('matches')->get();
Run Code Online (Sandbox Code Playgroud)
我得到一个空集合.如果我打电话
$movie = Movie::find(1)->matches()->get();
Run Code Online (Sandbox Code Playgroud)
我确实得到了与电影相关的匹配,所以我知道关系设置正确.我无法弄清楚我在使用Movie :: has方法做错了什么.
我正在使用随composer创建的laravel项目中包含的sqlite3数据库.这是结构和数据:
sqlite> .schema movie
CREATE TABLE "movie" ("id" integer not null primary key autoincrement, "title" varchar not null);
sqlite> .schema match
CREATE TABLE "match" ("id" integer not null primary key …
Run Code Online (Sandbox Code Playgroud) 我正在为学校平台开发 API。\n我想在开发过程中在启动脚本中迁移数据库并为其设定种子。
\n\n我可以创建学校实例、组实例和个人实例,但我不知道如何在个人实例和组实例之间添加关系(多对多)
\n\n这是我的 Person .json 文件:
\n\n{\n "name": "Person",\n "base": "User",\n "strict": true,\n "idInjection": true,\n "properties": {\n "name": {\n "type": "string",\n "required": true\n },\n "firstName": {\n "type": "string",\n "required": true\n }\n },\n "validations": [],\n "relations": {\n "groups": {\n "type": "hasAndBelongsToMany",\n "model": "Group"\n },\n "school": {\n "type": "belongsTo",\n "model": "School"\n }\n },\n "acls": [],\n "methods": []\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n这是我的 group.json 文件
\n\n{\n "name": "Group",\n "base": "PersistedModel",\n "strict": true,\n "idInjection": true,\n "properties": {\n "name": {\n "type": "string",\n "required": …
Run Code Online (Sandbox Code Playgroud) django ×3
foreign-keys ×2
mysql ×2
php ×2
associations ×1
constraints ×1
generics ×1
laravel-4 ×1
loopbackjs ×1
mongoid ×1
nested-forms ×1
python ×1
querying ×1
sql ×1
strongloop ×1
tuples ×1