【发布时间】:2016-07-23 20:12:35
【问题描述】:
我有下表result:
roll integer
c_id varchar(20)
marks number(6,2)
grade varchar(6)
gpa number(3,2)
cgpa number(3,2)
year varchar(10)
term varchar(10)
还有courses 和student 表。我已经在result表中输入了课程的分数,并想在成绩栏中分配相应的成绩。我想在成绩栏中插入 A+ 表示大于或等于 240 的分数,A 表示大于等于 210 且小于 240 的分数。
我该怎么做?
这里是 DDL:
drop table result;
drop table courses;
drop table student;
create table student(
roll number(10),
fname varchar(30),
lname varchar(30),
department varchar(50)
);
ALTER TABLE student ADD PRIMARY KEY (roll)
create table courses(
c_id varchar(30) NOT NULL,
c_name varchar(30),
credit integer CHECK(credit>0 and credit<5)
);
ALTER TABLE COURSES ADD PRIMARY KEY (c_id)
ALTER TABLE COURSES ADD UNIQUE KEY (c_id)
create table result(
roll number(10),
c_id varchar(30),
marks number (6,2),
year varchar (10),
term varchar (10),
gpa number(3,2),
cgpa number(3,2),
grade varchar (4)
);
ALTER TABLE result ADD FOREIGN KEY (roll) REFERENCES student(roll)
ALTER TABLE result ADD FOREIGN KEY (c_id) REFERENCES courses(c_id)
这是结果数据:
insert into result (roll,c_id,marks,year,term) values (1307019,'cse 3103',200,'2nd','1st');
insert into result (roll,c_id,marks,year,term) values (1307019,'cse 3105',210,'2nd','1st');
insert into result (roll,c_id,marks,year,term) values (1307019,'cse 3107',190,'2nd','1st');
【问题讨论】:
-
为什么要在同一张表的同一列上同时添加主键和唯一键?您应该(可能)在
results上添加一个复合主键,来自roll, c_id, year, term。那么 - 为什么将“gpa”保留在保存个别课程成绩的同一张表中?应该计算“gpa”,而不是存储。