标签: composite-primary-key

复合主键/外键头痛

我正在使用 SQL Server 2008 R2、C# 和 ASP.Net。我有一个表,它有一个由票号组成的复合主键,以及该票在表中出现的次数。工单频率由 C# 代码计算:

VTTTickets.InsertParameters[0].DefaultValue = VTTTTicketNoBox.Text;
string CommString = "SELECT COUNT(*) FROM [Tickets] WHERE [Ticket_No] = " + 
VTTTTicketNoBox.Text;
string ConnString = ConfigurationManager.ConnectionStrings[1].ConnectionString;
OdbcConnection Conn = new OdbcConnection(ConnString);
Conn.Open();
OdbcCommand FooCommand = newOdbcCommand(CommString,Conn);
int FooVal = Convert.ToInt32(FooCommand.ExecuteScalar()) + 1;
VTTTickets.InsertParameters[1].DefaultValue = Convert.ToString(FooVal);
VTTTTicketNoBox.Text = "";
Conn.Close();
Run Code Online (Sandbox Code Playgroud)

我的表约束/等代码

CONSTRAINT [PK_Tickets] PRIMARY KEY CLUSTERED 
([Ticket_No] ASC, [Ticket_Sub_No] ASC)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = ON,
ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY], …
Run Code Online (Sandbox Code Playgroud)

c# asp.net foreign-keys sql-server-2008 composite-primary-key

3
推荐指数
1
解决办法
1586
查看次数

如何使用JPA/Hibernate设置复合主键的列顺序

我在复合主键中对列的排序有问题.我有一个包含以下内容的表:

@Embeddable
public class MessageInfo implements Serializable {

    private byte loc;
    private long epochtime;

    @Column(name = "loc")
    public byte getLoc() {
        return loc;
    }    

    @Column(name = "epochtime")
    public long getEpochtime() {
        return epochtime;
    }
}
Run Code Online (Sandbox Code Playgroud)

它用于此映射:

@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class AbstractMessage implements Message {

    private MessageInfo info;
    private int blah;

    @EmbeddedId
    public MessageInfo getInfo() {
        return info;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我用一个具体的@Table类继承AbstractMessage时,hibernate创建了没有错误的数据库和表.问题是hibernate生成复合主键,其列与我想要的顺序相反.

CREATE TABLE  `mydb`.`concrete_table` (
  `epochtime` bigint(20) NOT NULL,
  `loc` tinyint(4) NOT NULL,
  `blah` smallint(6) DEFAULT NULL,
  `foo` …
Run Code Online (Sandbox Code Playgroud)

mysql hibernate jpa composite-primary-key

3
推荐指数
2
解决办法
2563
查看次数

SQL主键 - 是否有必要?

我有一个项目清单.大多数这些物品都没有库存.item表有id,name,description.项目数量存储在名为inventory的另一个表中.库存表具有item_id和库存商品的数量.

我是否需要库存表的主键?如果是这样,我应该使用串行密钥还是复合密钥?什么时候表没有主键?

编辑:谢谢大家提供的信息.我现在总是有主键,除非极少数例外.我还了解了有关串行与复合键的更多信息.

sql key primary-key composite-key composite-primary-key

3
推荐指数
1
解决办法
8335
查看次数

如何使用alter命令为已具有主键的表定义复合主键?

ALTER当已经为现有表定义主键时,我需要知道如何使用table命令定义复合主键?

数据库: Oracle 11g

alter-table primary-key oracle11g composite-primary-key

3
推荐指数
1
解决办法
8222
查看次数

主义复合主键

我知道Doctrine 2.0支持复合键.但我无法找到我要找的东西.

我有3个表=> agent,client和client_group.
代理创建客户端和client_group.Client_Group具有复合主键=> id,agent_id.agent_id来自代理表.虽然我希望id自动递增,但agent_id来自代理表.
我正在尝试编写yaml文件但我不确定如何将此agent_id指定为client_group中的主键.client_group_id和agent_id是客户端表中的外键.另外,我在Doctrine文档中读过,复合PK不能有自动递增的字段.

所以,如果我真的可以做我想在这里制作的东西,我就是在想.

仅显示关系的yaml看起来像这样:

代理:

  oneToMany:
    client_group:
      targetEntity: ClientGroup
      mappedBy: agent
    client:
      targetEntity: Client
      mappedBy: agent
Run Code Online (Sandbox Code Playgroud)

client_group

  manyToOne:
    agent_id:
      targetEntity: Agent
      inversedBy: client_group
      joinColumn:
        name: agent_id
        referencedColumnName: id

  oneToMany:
    client:
      targetEntity: Client
      mappedBy: client_group
Run Code Online (Sandbox Code Playgroud)

客户

  manyToOne:
    client:
      targetEntity: ClientGroup
      inversedBy: client
      joinColumn:
        name: client_group_id
        referencedColumnName: id
    agent:
      targetEntity: Agent
      inversedBy: agents
      joinColumn:
        name: agent_id
        referencedColumnName: id
Run Code Online (Sandbox Code Playgroud)

任何有关这方面的帮助都会受到重视.谢谢.

composite-key composite-primary-key doctrine-orm

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

SQL.如何引用复合主键Oracle?

我有两个父表:TreatmentVisit.

治疗台:

 create table Treatment (
    TreatCode CHAR(6) constraint cTreatCodeNN not null,
    Name VARCHAR2(20),
    constraint cTreatCodePK primary key (TreatCode),
    );
Run Code Online (Sandbox Code Playgroud)

访问表:

create table Visit (
SlotNum NUMBER(2),
DateVisit DATE,
ActualArrivalTime DATE,
constraint cVisitSlotDatePK primary key (SlotNum, DateVisit)
);
Run Code Online (Sandbox Code Playgroud)

现在我尝试创建一个子表:

create table Visit_Treat (
TreatCode constraint cTreatCodeFK references Treatment(TreatCode),
SlotNum constraint cSlotNumFK references Visit(SlotNum),
DateVisit constraint cDateFK references Visit(DateVisit),
constraint cVisitTreatPK primary key (SlotNum, TreatCode, DateVisit)
);
Run Code Online (Sandbox Code Playgroud)

一切都很好,直到3行.从第3行开始,即SlotNum constraint ...有一条消息:no matching unique or primary …

sql oracle composite-primary-key

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

插入"Krakow"和"Kraków"时,"重复输入...用于键PRIMARY"

我有一个Entity LocationsCoordinates用于保存具有唯一位置和国家(制作复合主键)的数据库中位置的坐标,其定义如下:

@Entity
@Table(name = "LOCATIONS_COORDINATES")
@IdClass(LocationsCoordinatesPK.class)
public class LocationsCoordinates  implements Serializable {

    private static final long serialVersionUID = -4580217081464519853L;

    @Id
    @Column(name = "LOCATION")
    String location;

    @Id
    @Column(name = "COUNTRY")
    String country;

    @Column(name = "LATITUDE")
    Double latitude;

    @Column(name = "LONGITUDE")
    Double longitude;

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public Double getLatitude() {
        return …
Run Code Online (Sandbox Code Playgroud)

java mysql spring jpa composite-primary-key

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

sqlite中的复合主键

PRIMARY KEY(col1, col2)

创建一个名为“sqlite_autoindex_mytable_1”的索引。我在“SQlite Expert”中看到了。在“要索引的字段”框中,它同时显示 col1 和 col2。

在这篇文章中:https : //dba.stackexchange.com/a/14260 它说如果我想在没有 col1 的 JOIN 查询中使用 col2,我必须为 col2 创建单独的索引。

所以我需要补充:

CREATE INDEX "myidx" ON "mytable"("col2");

如果我有这个查询:

SELECT t2.* FROM mytable as t1 
INNER JOIN mytable2 as t2 ON t1.col2 = t2.id
Run Code Online (Sandbox Code Playgroud)

我还需要 col2 的索引吗?我没有col1在里面使用。

那么这个查询呢:

SELECT t2.* FROM mytable as t1 
INNER JOIN mytable2 as t2 ON t1.col2 = t2.id WHERE t1.col1 = x
Run Code Online (Sandbox Code Playgroud)

这里我使用 col1,但在 where 子句中。它还需要 col2 索引吗?

sql sqlite primary-key composite-primary-key

3
推荐指数
1
解决办法
6232
查看次数

我应该如何为现有数据库表定义复合主键?

我正在开发一个Core MVC项目,该项目从预先存在的数据库中读取数据(无需编写).不幸的是,这个数据库是一团糟,但我不能改变其中的任何东西(即使我可以,我不会用10英尺的杆子触摸它).

数据库的一些相关问题如下:

  • 这些表彼此之间没有任何外键关系,并且包含最好输入子表的数据; 创建数据库的人似乎已经将表用作Excel电子表格.
  • 没有定义主键或外键.
  • 表和列的名称似乎是所包含数据的首字母(对于一个假想的示例,一个人通常将其命名为"Customer"的表将被命名为"dbbc",而不是"Database - Business Customer").
  • 这些表不在"dbo"架构中.

然而,我被迫从这个数据库中读取数据,并且更愿意使用实体框架来执行此操作.

该数据库托管在SQL Server 2008R2中.

通过使用[Table],[Column]和[Key]等属性来使用一个具有映射到实际列名称的适当属性名称的类,我可以使其在我必须使用的其中一个表上没有问题.然而,另一张桌子被证明是一个问题.

此表没有可以被视为主键的单个列,但我发现两列的组合对于每一行都是唯一的,因此它们可以被视为复合主键(即使它们未被定义为这样在数据库中).

我已经定义了一个类如下(我已经更改了名称来隐藏这个数据库的标识,就像我想要的名字和耻辱):

[Table("dbbo", Schema = "schema")]
public class Order
{
    [Key]
    [Column("order", Order = 0)]
    public string OrderNo { get; set; }

    [Key]
    [Column("order_line", Order = 1)]
    public string OrderLineNo { get; set; }

    [Column("qty")]
    public double Quantity { get; set; }

    [Column("pr")]
    public double Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
  • 我已经为构成虚构复合主键的两列添加了[Key]属性.
  • 我已经为[Column]属性的Order属性添加了一个值,因为我读到它是复合键所必需的.
  • 我只映射了我需要使用的列,因为该表的列数比该项目的列数多10倍.

仍然,尝试运行该项目会产生错误:

InvalidOperationException:实体类型"MyProject.Models.Order"需要定义主键.

我还可以添加更多内容以使此表与Entity Framework一起使用吗?

编辑:我发现它可以工作,如果我在上下文的 …

sql-server entity-framework composite-primary-key ef-database-first entity-framework-core

3
推荐指数
1
解决办法
2047
查看次数

外键是否可以成为另一个表的复合主键的一部分?

我在音乐数据库中有两个(很多)表:

音乐会:ArtistID,ConcertID,ConcetName,VenueID ConcertDetails:ConcertDate,ConcertID,Cost

您看到的ConcertDetails表使用ConcertID,它也在Concerts表中.我结合ConcertDate和ConcertID为ConcertDetails制作复合主键.但是,由于这与Concerts表中的ConcertID相关,因此它也需要是外键.这样可以吗?

mysql foreign-keys composite-primary-key

3
推荐指数
1
解决办法
4621
查看次数