Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我可以在这里使用复合主键吗?_Sql_Sql Server - Fatal编程技术网

Sql 我可以在这里使用复合主键吗?

Sql 我可以在这里使用复合主键吗?,sql,sql-server,Sql,Sql Server,下面是我的两张桌子 Student(rno int primary key,name varchar(20)) Fees(id int identity,name varchar(10), amount decimal(10,2), pdate date, rno int foreign key references Student(rno)) 在费用表[id name rno]中给出了唯一的 所以我可以在表费用上创建复合主键吗?或者需要再添加一个表来规范化 表Fees上的大多数搜索都基于列

下面是我的两张桌子

Student(rno int primary key,name varchar(20))

Fees(id int identity,name varchar(10), amount decimal(10,2), pdate date,
rno int foreign key references Student(rno))
费用
[id name rno]
中给出了唯一的

所以我可以在表
费用
上创建复合主键吗?或者需要再添加一个表来规范化

Fees
上的大多数搜索都基于列
rno
。因此,如果我在
rno
上有索引就好了

如果您想通过下面的代码成为(id,rno)的唯一集,您可以创建复合主键

create table my_table (
     column_a integer not null,
     column_b integer not null,
     column_c varchar(50),
     primary key (column_a, column_b)
);

创建复合主键约束后,您将无法插入重复的rno和id组合

再创建一个FeesMaster表,在其中输入费用类型及其名称(如果有),然后输入价格或其他详细信息

这将有助于未来的扩张。

并将FeesMaster id引用为FeesID。如果是数字字段,则始终将主键指定为“自动递增”

你的桌子是这样的

Student(rno int primary key with auto-increment,name varchar(20))

FeesMaster(feesid int primary key with auto-increment,name varchar(20), price int, dueprice int) --last 2 is optional or give other detail which work as a master detail

--use this table as a transaction table of both above master table, the logic is
Fees(
id int identity, 
rno int foreign key references Student(rno),
feesid id foreign key references FeesMaster(FeesID), 
amount decimal(10,2), 
pdate date)
更新:-

Fees
    id is primary-key of Fees table which are auto-increment
    rno is refernce-key of Student table's rno column
    feesid is refernce-key of FeesMaster table's feesid column
因此在insert中,根据费用名称给出了费用主机的feesid。要获取数据,查询如下所示

select s.name as studentname, fm.name as feesname
from student s
inner join Fees f on f.rno = s.rno
inner join FeesMaster fm on f.feesid = fm.feesid 

在考虑性能时,有3列是好主意吗?所以这里(id,rno)是表费用的主键。不是吗?列rno上没有索引。那么如何根据“rno”搜索“费用”表。正如我所说,我主要使用“rno”来搜索“费用”表。