标签: database-relations

为什么定位查询不好?

我正在阅读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

7
推荐指数
3
解决办法
474
查看次数

Django:从相关的模型集中获取相关集

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)

python django foreign-keys database-relations

7
推荐指数
1
解决办法
2353
查看次数

如何使用自动递增的主键作为外键?

这就是我想要做的:

我有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,CONSTRAINT parent_ibfk_1FOREIGN KEY(id)REFERENCES child(parent_id))

我知道它失败了,因为它没有在子表中找到引用的记录.如果我开始在子表中创建一个记录,将它的parent_id设置为1,然后重置父表的自动增量计数器(以便下一个插入将具有id = 1),它的工作原理!但那不是解决方案.

如果子表中没有相关的行,我没有看到插入阻塞的效用... …

mysql constraints foreign-keys database-relations auto-increment

6
推荐指数
1
解决办法
4万
查看次数

Mongoid(Rails)中的两个1 - N关系

场景是:

帐户如何为其他帐户评分?这导致帐户上有两个列表.我评价的人和评价我的人.(my_ratings和ratings_given)

这归结为:

如何在同一实体中使用多个1-N关系在Mongoid中工作?

在Mongoid的文档中,它说你可以使用has_manybelongs_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)

文档没有涵盖这种情况,所以我认为你必须用:作为参数区分两者.

这甚至是遥控器吗?

ruby-on-rails database-relations mongoid

6
推荐指数
1
解决办法
3587
查看次数

Django多用户登录 - 最好的方法?

我目前正在开发一个Django站点,用户可以在其中拥有多个"帐户",这样他们就可以在通过站点进行交互时在不同的公共配置文件之间无缝切换.我正在设计的内容可能会吸引每人多次注册(并且不会气馁),我只想提供这样一种方式,即用户可以将配置文件捆绑在一起,轻松切换并且只需要记录一次.

到目前为止我想到的两种方法包括:

  • 一个(User型号+ SiteProfile型号)对和PublicProfile每个人的许多模型.AUTH_PROFILE_MODULE设置为指向SiteProfile模型.这个问题是我不能轻易使用每个对象的权限:这些权限将设置在User对象而不是公共配置文件上,因此当用户伪装成"公共配置文件"时,查看"PublicProfileA"页面的权限也将被应用. "PublicProfileB".

  • 每人一个Account模型和许多(User模型+ UserProfile模型)对.AUTH_PROFILE_MODULE设置为指向UserProfile模型.这将具有按预期工作的权限的额外好处,并且我可以简单地具有自定义后端,其将通过如果用户当前Account以与外键具有相同对象的另一用户登录来切换用户.通过读取Account对象上的字段会发生身份验证,这意味着password每个User对象上的字段都将被浪费.

  • 如上所述,但是继承AccountUser.我曾被强烈反对这一点(原因尚不清楚).

这有什么陷阱或更好的方法吗?最终,我应该使用内置User模型作为每人一个模型来识别一组面向公众的配置文件(这些配置文件将FK返回到User对象),或者将其用作配置文件本身,链接回来Account为每个人一个对象?

django database-relations django-models django-authentication

6
推荐指数
1
解决办法
1093
查看次数

如何在django中制作和实施通用的OneToOne关系?

我想要完全相同的东西django.contrib.contenttypes.generic.GenericForeignKey,而OneToOne不是ForeignKey.我认为一个简单(虽然略微不优雅)的解决方法是添加unique=True到相关领域,但是那个borks.

generics django database-relations django-models

5
推荐指数
1
解决办法
1836
查看次数

如何使用accepts_nested_attributes_for在Rails3中创建嵌套对象?

我无法弄清楚如何设置一个创建新的表单,Study同时还创建相关的StudySubjectFacility.的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_manybelongs_to定义是否正确?
2)如何study使用accepts_nested_attributes_for创建一个?
3)研究应该只属于一个用户.我是否需要将其添加user_id到每个其他对象中以存储关联? …

database-relations associations nested-forms ruby-on-rails-3

5
推荐指数
1
解决办法
4267
查看次数

MySQL:从类别中获取帖子

我正在尝试学习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)

php mysql database-relations hierarchical-data

5
推荐指数
1
解决办法
1322
查看次数

Laravel查询关系模型:: has('relation')不起作用

在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)

php querying database-relations laravel-4

5
推荐指数
1
解决办法
7024
查看次数

Strongloop 环回:如何在启动脚本中的模型实例上添加相关模型实例

我正在为学校平台开发 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)

database-relations strongloop loopbackjs

5
推荐指数
1
解决办法
2741
查看次数