Sql server中表中的复合主键 [英] Composite Primary Key in Table in Sql server

查看:277
本文介绍了Sql server中表中的复合主键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在表中创建复合主键,但是Ms Sql server给出了您无法创建复合主键的错误。为什么?或者任何其他选择。

我想创建表订阅与表付款之间的一对一关系,然后创建一对一的关系,表付款到PaymnetCash,PaymentWesternUnion,PaymentCreditCard。



 创建  TblSubscription 

SubscriptionId int identity 1 1 主要 密钥
UserId INT NOT NULL 外来 密钥 参考 TblAppUser( UserId),
PackageId INT NOT NULL 外来 密钥 引用 TblPackages(PackageID),
StartDate datetime
FinishDate datetime
IsActive 位<​​/ span>,
IsPaid 位<​​/ span>
) ;


创建 TblPayment

PaymentId int identity 1 1 主要 密钥
SubscriptionId int 主要 密钥
PaymentAmount float
PaymentDate datetime
PaymentMethod varchar 50 ),
PaymentStatus bit
);

解决方案

嗯,SQL 说你不能创建复合键,它是说你不能拥有多个主键。



查看此链接 [ ^ ]有关如何创建复合主键的示例



我怀疑您的架构设计完全符合划痕,可能需要重新思考

I want to create Composite Primary Key in a table, but Ms Sql server gives me the error that you cant create composite primary keys. why? or any alternative.
I want to create One-to-One relationship between Table Subscription against Table Payment then then One to One relationship against Table Payment to PaymnetCash,PaymentWesternUnion,PaymentCreditCard.

Create Table TblSubscription
(
SubscriptionId int identity(1,1) Primary key,
UserId INT NOT NULL Foreign key References TblAppUser(UserId),
PackageId INT NOT NULL Foreign key References TblPackages(PackageID),
StartDate datetime,
FinishDate datetime,
IsActive bit,
IsPaid bit
);


Create Table TblPayment
(
PaymentId int identity(1,1) Primary Key,
SubscriptionId int Primary key,
PaymentAmount float,
PaymentDate datetime,
PaymentMethod varchar(50),
PaymentStatus bit
);

解决方案

Well, SQL is not saying that you cannot create a composite key, it is saying that you can't have multiple primary keys.

Have a look at this link[^] for an example of how to create a composite primary key

I suspect your schema design is exactly up to scratch though and may need some rethinking


这篇关于Sql server中表中的复合主键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆