数据库问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库问题相关的知识,希望对你有一定的参考价值。

设有一个SPJ数据库,包括供应商表S,零件表P,工程项目表J,供应情况表SPJ四个关系模式:
S( SNO,SNAME,STATUS,CITY),属性分别代表:供应商号(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)。
P(PNO,PNAME,COLOR,WEIGHT),属性分别代表:零件号(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT);
J(JNO,JNAME,CITY),属性分别代表:工程号(JNO)、工程名(JNAME)、工程所在城市(CITY);
SPJ(SNO,PNO,JNO,QTY),属性分别代表:供应商号(SNO)、零件号(PNO)、工程号(JNO)、供应数量(QTY)。
请用关系代数表达式实现下列查询(每小题3分):
(1) 查询供应工程J1零件的供应商号SNO;
(2) 查询使用“上海”产的“红色”零件的工程名JNAME;
请用SQL语句实现下列查询(每小题4分):
(3) 查询工程J2使用的各种零件的名称及其数量;
(4) 查询没有使用“天津”供应商生产的“红色”零件的工程号JNO;
(5) 查询工程J2使用的各种零件的零件号和总数量,将查询结果按照零件总数量的降序排序;
(6) 把全部“红色”零件的颜色改为“蓝色”;
(7) 建立一个供应商号为“S1”的供应情况视图;
(8) 删除供应情况表SPJ中工程号为“J1”的所有供应情况。

(1) select SNO '供应商号' from SPJ where JNO = 'J1'
(2) select J.JNAME from
SPJ inner join P on SPJ.SNO = P.PNO inner join J on SPJ.JNO = J.JNO
where J.CITY = '上海' and P.COLOR = '红色'
(3) select P.PNAME,COUNT(SPJ.QTY) from
SPJ inner join P on SPJ.SNO = P.PNO inner join J on SPJ.JNO = J.JNO
where J.JNO = 'J2'
group by P.PNAME
(4) select J.JNO from
SPJ inner join P on SPJ.SNO = P.PNO and P.COLOR = '红色' inner join J on SPJ.JNO = J.JNO inner join S on SPJ.SNO = S.SNO
where S.CITY <> '天津'
(5) select P.PNO,COUNT(SPJ.QTY) 'count' from
SPJ inner join P on SPJ.SNO = P.PNO inner join J on SPJ.JNO = J.JNO
group by P.PNO
order by count desc

(6) update P set P.COLOR ='蓝色' where Color = '红色'

(7)
create view view_s
as
select * from
SPJ inner join P on SPJ.SNO = P.PNO inner join J on SPJ.JNO = J.JNO inner join S on SPJ.SNO = S.SNO
where S.SNO = 'S1'

(8) delete from SPJ where JNO ='J1'

不知对不对,仅供参考~
参考技术A 作业题啊?
详见数据库系统概论 作者王珊 萨师煊 高等教育出版是出版
数据库的入门教程
参考技术B 靠,这么简单的东西还要粘上来问,你长点心吧你~

在数据库中存储考试问题

【中文标题】在数据库中存储考试问题【英文标题】:Storing Exam Questions in a Database 【发布时间】:2014-05-15 11:32:21 【问题描述】:

一年多来,我一直在考虑如何设计一个数据库来保存试题(时断时续,大部分时间都是关闭的)。

首先,简要描述一下我所追求的。我想设计一个足够灵活的数据库来存储不同的问题类型(例如,简答题或多项选择题),并且能够选择任意数量的这些问题作为考试进行存储。

我的问题是:

试题应该如何存储?

由于不同的问题类型需要存储不同的字段,如果我将它们都放在同一张表questions下,将会有很多额外的字段从未使用过。

如果我将问题类型分成不同的表,那么将 question_id 存储在一些 exam_questions 表中会更加困难,因为它们将来自不同的表。

我也想不出一种灵活的方式来存储信息。

例如,

questions
 - id
 - question
 - type (multiple choice, short response)
 - choice_1 ( used for multiple choice questions)
 - choice_2
 - choice_3
 - choice_4
 - choice_5
 - answer (short response answer here, or just a/b/c/d/e for multiple choice, t/f for true or false)

会推荐这样的设计吗?如果没有,有人有什么建议吗?

我还有一个问题:

如果我想存储学生对其中一项考试的回答,这样存储它们会不会效率低下?

exam_responses
  - id
  - student_id
  - exam_id
  - question_id or question_number
  - response
  - mark

提前谢谢你。如果您想了解任何其他信息,或者此问题有任何问题,请给我留言,我会尽快修复。

【问题讨论】:

最好把问题和答案分开 【参考方案1】:

我会有单独的问答表,并使用 question2answer 表加入它们

question
--------
 - id
 - question
 - type (multiple choice, short response)

answer
------
 - id
 - GUIorder (so you can change the sort order on the front end)
 - answer

question2answer
---------------
 - questionid
 - answerid

现在,就构建问题而言,一切都是动态的,并且您没有空列。 快速加入让您回到主要问题的所有部分

您的exam_responses 表现在可以包含以下内容

- id
- questionid
- answerid
- studentid
- response
- mark

【讨论】:

感谢您抽出宝贵时间回复!我有一个快速的问题。是否有任何理由使用 question2answer 表而不是将 questionid 存储在 answer 表中?你能举个例子吗?问候,米克。 @Mick 这样您就可以重复使用答案 - 即。对多个问题的判断是对还是错 - 这完全取决于您的问题的结构。【参考方案2】:

我认为在问题表中为每个响应存储五列并不是一个好的设计。如果问题的选项数变为 6,您将不得不再添加一列。此外,如果只有两个选项,其余列将保持为空。所以最好放在两个单独的表中:

questions
 - id
 - question
 - type (multiple choice, short response)
 - answer (short response answer here, or just a/b/c/d/e for multiple choice, t/f for true or false)

question_choices
- id
- question_id
- choice

然后,您可以根据 questions.id=question_chocies.question_id 条件加入每个特定问题的选项列表。

如果是考试回复,您也应该分成两个表格,以免重复有关每个考试问题的学生 ID、考试和分数的信息。所以应该是这样的:

student_exam
  - id
  - student_id
  - exam_id
  - mark

student_exam_responses
  - exam_id
  - question_id or question_number
  - response

这两个表可以根据student_exam.id=student_exam_responses.exam_id条件连接起来。

【讨论】:

以上是关于数据库问题的主要内容,如果未能解决你的问题,请参考以下文章

求解这个数据库问题

Oracle 数据库查询问题 - 插入数据的问题

数据库设计之部门与职位问题?

servlet连接数据库问题 报错问题

JAVA问题

手动删除zabbix问题数据库