标签: junction-table

如何从SQLite表中检索最后一个自动增量ID?

我有一个表列消息列ID(主键,自动增量)和内容(文本).
我有一个表用户名列有用户名(主键,文本)和哈希.
一个发件人(用户)向许多收件人(用户)发送邮件,收件人(用户)可以收到许多邮件.
我创建了一个包含两列的表Messages_Recipients:MessageID(引用Messages表的ID列和Recipient(引用Users表中的用户名列).此表表示收件人和邮件之间的多对多关系.

所以,我的问题是这个.在将新消息存储在数据库中之后,将创建新消息的ID.但是,我如何保存对刚刚添加的MessageRow的引用以便检索这个新的MessageID?
我总是可以在数据库中搜索最后添加的行,但是这可能会在多线程环境中返回一个不同的行?

编辑:据我所知,SQLite你可以使用SELECT last_insert_rowid().但是如何从ADO.Net中调用此声明?

我的持久性代码(messages和messagesRecipients是DataTables):

public void Persist(Message message)
{
    pm_databaseDataSet.MessagesRow messagerow;
    messagerow=messages.AddMessagesRow(message.Sender,
                            message.TimeSent.ToFileTime(),
                            message.Content,
                            message.TimeCreated.ToFileTime());
    UpdateMessages();
    var x = messagerow;//I hoped the messagerow would hold a
    //reference to the new row in the Messages table, but it does not.
    foreach (var recipient in message.Recipients)
    {
        var row = messagesRecipients.NewMessages_RecipientsRow();
        row.Recipient = recipient;
        //row.MessageID= How do I find this??
        messagesRecipients.AddMessages_RecipientsRow(row);
        UpdateMessagesRecipients();//method not shown
    } 

}

private void UpdateMessages()
{
    messagesAdapter.Update(messages);
    messagesAdapter.Fill(messages);
}
Run Code Online (Sandbox Code Playgroud)

database sqlite primary-key auto-increment junction-table

72
推荐指数
5
解决办法
10万
查看次数

在连接表中,Rails缺少复合键的最佳解决方法是什么?

create_table :categories_posts, :id => false do |t|
  t.column :category_id, :integer, :null => false
  t.column :post_id, :integer, :null => false
end
Run Code Online (Sandbox Code Playgroud)

我有一个连接表(如上所述),其中的列引用了相应的类别表和posts表.我想执行的唯一约束组合键CATEGORY_ID,POST_IDcategories_posts连接表.但是Rails不支持这个(我相信).

为了避免我的数据中具有相同category_id和post_id组合的重复行的可能性,在Rails中缺少复合键的最佳解决方法是什么?

我的假设是:

  1. 在这种情况下,默认的自动编号列(id:整数)无法保护我的数据.
  2. ActiveScaffold可能会提供一个解决方案,但我不确定将它包含在我的项目中仅仅针对这个单一功能是否过度,特别是如果有更优雅的答案.

database ruby-on-rails composite-key junction-table

30
推荐指数
4
解决办法
8387
查看次数

MS SQL与联结表创建多对多关系

我正在使用Microsoft SQL Server Management Studio,在创建联结表时,我应该为联结表创建一个ID列,如果是这样,我还应该将它作为主键和标识列吗?或者只是为我加入多对多关系的表保留2列?

例如,如果这将是多对多表:

MOVIE
Movie_ID
Name
etc...

CATEGORY
Category_ID
Name
etc...
Run Code Online (Sandbox Code Playgroud)

我应该建立联结表:

MOVIE_CATEGORY_JUNCTION
Movie_ID
Category_ID
Movie_Category_Junction_ID
Run Code Online (Sandbox Code Playgroud)

[并制作Movie_Category_Junction_ID我的主键并将其用作标识栏]?

要么:

MOVIE_CATEGORY_JUNCTION
Movie_ID
Category_ID
Run Code Online (Sandbox Code Playgroud)

[并且只留下没有主键或身份表的那个]?

sql sql-server many-to-many junction-table

29
推荐指数
2
解决办法
6万
查看次数

连接表与外键数组?

我正在建模多对多关系,其中大部分时间只从一侧访问关系.它更像是一个层次结构,可以自上而下访问,而不是相反.

调查已经并且属于许多问题并且属于许多答案.

这两种关系必须是多对多的,因为同一个问题可以在不同的调查中重复使用,并在许多问题中得到相同的答案.这是一项要求.

标准M2M实现将使用两个连接表,surveys_questionsquestions_answers.相反,我正在考虑使用PostgreSQL的整数数组存储question_ids在Survey和answer_idsQuestion中.

我们可以利用ANY运算符来查询与外键数组匹配的所有行.

我们如何使用SQL查询所有问题和问题的答案?

我们如何匹配使用外键数组返回的行的顺序?即.使用question_ids = [1,2,3]保证返回顺序为1,2,3的问题行.

与联结表相比,这如何表现性能(假设适当的索引,无论它们是什么)?

你能建议一下吗?有没有像这样建模M2M的资源?

更新

有人建议将数组外键的引用完整性添加到PostgreSQL 9.3,但它没有包括在内:http://blog.2ndquadrant.com/postgresql-9-3-development-array-element-foreign-keys/

关于使用外键数组PostgreSQL JOIN维护顺序的问题,数组类型与数组元素顺序,如何实现?

arrays postgresql many-to-many junction-table

23
推荐指数
1
解决办法
5518
查看次数

为什么在连接表上有主键是不好的?

我正在观看一个截屏视频,作者说在连接表上有一个主键是不好的,但没有解释原因.

示例中的连接表在Rails迁移中定义了两个列,并且作者为每个列添加了索引但没有主键.

为什么在这个例子中有一个主键是不好的?

create_table :categories_posts, :id => false do |t|
  t.column :category_id, :integer, :null => false
  t.column :post_id, :integer, :null => false
end
add_index :categories_posts, :category_id
add_index :categories_posts, :post_id
Run Code Online (Sandbox Code Playgroud)

编辑:正如我提到的Cletus,即使对于连接表,我也能理解自动编号字段作为主键的潜在用处.但是,在上面列出的示例中,作者明确避免在"create table"语句中使用语法":id => false"创建自动编号字段.通常,Rails会自动将一个auto-number id字段添加到像这样的迁移中创建的表中,这将成为主键.但是对于这个连接表,作者专门阻止了它.我不确定他为什么决定采用这种方法.

database migration ruby-on-rails primary-key junction-table

21
推荐指数
1
解决办法
7755
查看次数

SQL连接在连接表上有多对多的关系

我有三个表,其中2个是常规数据表,1个是多对多联结表.

两个数据表:

table products

product_id | product_name | product_color
-----------------------------------------
1          | Pear         | Green
2          | Apple        | Red
3          | Banana       | Yellow
Run Code Online (Sandbox Code Playgroud)

table shops

shop_id    | shop_location
--------------------------
1          | Foo street
2          | Bar alley
3          | Fitz lane
Run Code Online (Sandbox Code Playgroud)

我有一个包含shop_id's和product_id's 的联结表:

table shops_products

shop_id    | product_id
--------------------
1          | 1
1          | 2
2          | 1
2          | 2
2          | 3
3          | 2
3          | 3
Run Code Online (Sandbox Code Playgroud)

我想从shop_id 3中的商店中选择数据.我从这里尝试了很多连接,左连接,内连接的例子,但我只是不知道我在这里做了什么以及出了什么问题.我的查询,但只是返回所有产品,无论他们是否在指定的商店是如下:

SELECT …
Run Code Online (Sandbox Code Playgroud)

mysql sql join junction-table

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

如何在EF中配置一对多关系

我有以下型号

public class PageConfig : Base
{
    // Properties Etc..

    public ICollection<Image> ScrollerImages { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的方法是使用联结表{PageConfigID,ImageID}进行绑定.

在我的模型活页夹中我尝试了以下..

modelBuilder.Entity<PageConfig>()
    .HasMany(x => x.ScrollerImages)
    .WithMany()
    .Map(x =>
    {
        x.ToTable("junc_PageConfigScrollerImages");
        x.MapLeftKey("PageConfigID");
        x.MapRightKey("ImageID");
    });
Run Code Online (Sandbox Code Playgroud)

这导致图像的空集合.

如何将这些图像绑定到PageConfig模型?

编辑

大多数问题是由于用户错误.这发生在你身上......

检查数据库中的键约束是否已正确设置.
模型上的ICollection NEEDS是虚拟的.

c# entity-framework one-to-many model-binding junction-table

10
推荐指数
1
解决办法
2万
查看次数

联结表(连接表)是否也可用于一对多关系?

根据定义,连接表(桥接表/链接表)用于多对多关系,如下所示:

CREATE TABLE Users
(
UserLogin varchar(50) PRIMARY KEY,
UserPassword varchar(50) NOT NULL,
UserName varchar(50) NOT NULL
)


CREATE TABLE Permissions
(
PermissionKey varchar(50) PRIMARY KEY,
PermissionDescription varchar(500) NOT NULL
)


--This is the junction table.
CREATE TABLE UserPermissions
(
UserLogin varchar(50) REFERENCES Users (UserLogin),
PermissionKey varchar(50) REFERENCES Permissions (PermissionKey),
PRIMARY KEY (UserLogin, PermissionKey)
)
Run Code Online (Sandbox Code Playgroud)

但是它也不能像一对多关系那样容易使用,就像在这个例子中一个用户与许多订单相关联:

(我不太了解数据库,所以如果我误解了某些内容,请纠正我.)

CREATE TABLE Users
(
UserLogin varchar(50) PRIMARY KEY,
UserPassword varchar(50) NOT NULL,
UserName varchar(50) NOT NULL
)


CREATE TABLE Orders
( …
Run Code Online (Sandbox Code Playgroud)

database many-to-many one-to-many junction-table

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

与实体框架中的联结表有多对多的关系?

我正在尝试在Entity Framework(代码优先)中创建多对多关系,根据以下帖子:MVC和Entity Framework中有限数量的选择的数据库设计?

但是,我无法让它正常工作,而且我确信我的做法非常简单.这是我尝试过的图表:

在此输入图像描述

联结表的要点是我需要在关系中有一个额外的属性Level,所以我不能只顾问顾问和程序之间的直接关系.我在设计器中手动添加了ConsultantProgramLink实体,然后分别向Program和Consultant添加了关联,选择为每个添加FK,然后将它们作为主键.但是,当我这样做时,它不能像我预期的那样工作:

如果我在顾问和程序之间建立了直接关联,那么我可以在我的代码中引用Consultant.Programs.但现在使用联结表不起作用.有没有办法解决这个问题,或者我是否总是需要通过交汇点属性(Consultant.ConsultantProgramLink.Programs)?在任何情况下,即使我尝试通过交汇处属性也无济于事.我可以在我的代码中做Consultant.ConsultantProgramLink,但是另一个点没有给我导航属性程序(由于某种原因它也变成了简单的程序,为什么?如果我最终可以访问它们,我可以重命名它们吗?) .

那么我做错了什么?为什么我不能通过代码中的点表示法访问属性?

asp.net junction-table entity-framework-4 asp.net-mvc-3

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

如何查询联结表

使用Entity Framework/LINQ,我需要以下帮助.

该数据库有一个People表,其标识列为PersonId.还有一个Skills表,其标识列为SkillId.这两个通过第三个表PeopleSkills连接,PeopleSkills有自己的标识列PeopleSkillsId,引用PersonId的外部列和引用SkillId的外部列.

我尝试编写的方法是传递一个List类型的参数,它包含我们正在寻找的任何技能.该方法应返回链接到输入参数列表中所有技能的List.如何在没有技能列表中的所有技能的情况下构建排除任何人的列表?

我遇到的问题是我的SQL经验非常少.我确实有很多其他编程经验,但SQL对我来说总是有点粗糙.我想过使用Join,但这不会起作用.即如果我的人具有技能A和B,并且搜索列表具有B&C的元素,则联接将在B上匹配它们并返回该人.我需要将这个人排除在外,因为他没有B&C.

我还想过迭代技能列表并构建一个过滤器,但这看起来很难看.这似乎是一个LINQ构建来处理的问题,使用List来查询另一个List,并且应该有一个优雅的解决方案.

.net linq entity-framework junction-table

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