数据库系统原理与实践——第二周作业
This commit is contained in:
parent
e5bbbf884b
commit
140386f746
37
数据库系统原理与实践/平时作业/mypreamble.tex
Normal file
37
数据库系统原理与实践/平时作业/mypreamble.tex
Normal file
@ -0,0 +1,37 @@
|
||||
\usepackage{tasks}
|
||||
\usepackage[framemethod=TikZ]{mdframed}
|
||||
% \usepackage[tikz]{bclogo}
|
||||
\usepackage{fontawesome5}
|
||||
|
||||
\usepackage{amssymb, amsfonts, amstext, amsmath, amsopn, amsthm}
|
||||
\usepackage{booktabs}
|
||||
\usepackage{hyperref}
|
||||
\usepackage{fancyhdr}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{totpages}
|
||||
\usepackage{mylatex}
|
||||
\usepackage{subfiles}
|
||||
|
||||
\title{《数据库系统原理与实践》作业}
|
||||
\author{岳锦鹏}
|
||||
\newcommand{\mysignature}{10213903403 岳锦鹏}
|
||||
\date{2024年9月11日}
|
||||
\setlist[1]{listparindent=\parindent}
|
||||
\setlist[2]{label=\textbf{\alph{enumii}.},listparindent=\parindent}
|
||||
\setlist[3]{label=\textbf{\alph{enumii}.},listparindent=\parindent}
|
||||
\definecolor{shadecolor}{RGB}{204,232,207}
|
||||
\definecolor{verificationColor}{RGB}{85,206,255} % 这颜色误差确实有点大啊,目前手动调的
|
||||
\setitemize[1]{label=\textbullet}
|
||||
\settasks{label=\Alph*.}
|
||||
\newmdenv[%
|
||||
frametitle={%
|
||||
\tikz[]
|
||||
\node[anchor=east,rectangle,fill=verificationColor]
|
||||
{ \faIcon{search}\ 验证一下};}, %
|
||||
% frametitlerule=true, %
|
||||
% frametitlebelowskip=10pt, %
|
||||
roundcorner=5pt, %
|
||||
innertopmargin=10pt,linecolor=verificationColor,%
|
||||
linewidth=2pt,topline=true, %
|
||||
frametitleaboveskip=\dimexpr-\ht\strutbox\relax,
|
||||
]{verification}
|
296
数据库系统原理与实践/平时作业/第二周作业.tex
Normal file
296
数据库系统原理与实践/平时作业/第二周作业.tex
Normal file
@ -0,0 +1,296 @@
|
||||
\documentclass[全部作业]{subfiles}
|
||||
\input{mysubpreamble}
|
||||
\begin{document}
|
||||
\setcounter{chapter}{1}
|
||||
\chapter{第二周作业}
|
||||
\begin{enumerate}
|
||||
\item 以下四个整数哪个不在Int类型的范围内?
|
||||
\begin{tasks}[](4)
|
||||
\task \fbox{$2^{31}$}
|
||||
\task $2^{31}-1$
|
||||
\task $-2^{31}$
|
||||
\task $-2^{31}+1$
|
||||
\end{tasks}
|
||||
\item 以下四个整数哪个不在Unsigned Int类型的范围内?
|
||||
\begin{tasks}[](4)
|
||||
\task $2^{31}$
|
||||
\task $2^{31}-1$
|
||||
\task \fbox{$2^{32}$}
|
||||
\task $2^{32}-1$
|
||||
\end{tasks}
|
||||
\item 对于默认的Decimal与Double类型,分别输入1234.56与9876.54后,将其字段类型分别修改为Decimal(5,1)与Double(5,1),最终显示的内容为
|
||||
\begin{tasks}[](4)
|
||||
\task 1235.0、9877.0
|
||||
\task 1234.6、9876.5
|
||||
\task \fbox{1235.0、9876.5}
|
||||
\task 1235.6、9876.0
|
||||
\end{tasks}
|
||||
\begin{verification}
|
||||
\begin{minted}{sql}
|
||||
drop table if exists test1;
|
||||
create table if not exists test1(decimal_ decimal, double_ double);
|
||||
\end{minted}
|
||||
\includegraphics[width=0.6\linewidth]{imgs/2024-09-27-08-44-19.png}
|
||||
|
||||
\begin{minted}{sql}
|
||||
insert into test1 values (1234.56, 9876.54);
|
||||
\end{minted}
|
||||
\includegraphics[width=0.6\linewidth]{imgs/2024-09-27-08-47-00.png}
|
||||
|
||||
\begin{minted}{sql}
|
||||
alter table test1 modify column decimal_ decimal(5, 1);
|
||||
alter table test1 modify column double_ double(5, 1);
|
||||
\end{minted}
|
||||
\includegraphics[width=0.6\linewidth]{imgs/2024-09-27-08-51-00.png}
|
||||
|
||||
\end{verification}
|
||||
\item 对于两种类型,分别设置为ENUM(‘a’, ‘b’, ‘c’)与SET(‘a’, ‘b’, ‘c’),之后均输入数据’a’、’a,c’、’a,d’,最终显示的内容为
|
||||
\begin{tasks}[](2)
|
||||
\task (‘a’)、(‘a’)
|
||||
\task (‘a’)、(‘a’, ‘a,c’)
|
||||
\task \fbox{(‘a’)、(‘a’, ‘a,c’, ‘a’)}
|
||||
\task (‘a’, ‘a,c’)、(‘a’, ‘a,c’, ‘a’)
|
||||
\end{tasks}
|
||||
\begin{verification}
|
||||
\begin{minted}{sql}
|
||||
DROP TABLE if EXISTS test2;
|
||||
CREATE TABLE if NOT EXISTS test2(
|
||||
enum_ enum('a', 'b', 'c'),
|
||||
set_ set('a', 'b', 'c')
|
||||
);
|
||||
INSERT INTO test2 VALUES ('a', 'a');
|
||||
INSERT INTO test2 VALUES ('a,c', 'a,c');
|
||||
INSERT INTO test2 VALUES ('a,d', 'a,d');
|
||||
\end{minted}
|
||||
\includegraphics[width=0.6\linewidth]{imgs/2024-09-27-09-09-53.png}
|
||||
\end{verification}
|
||||
\item 假设表A中有3个数据,其NAME项分别为\mycircle{1}‘Li Ming’, \mycircle{2}‘Fang Li’, \mycircle{3}‘Tang Li Zhi’, 对于命令SELECT NAME FROM A WHERE NAME LIKE ‘\%Li’, 其返回内容为
|
||||
\begin{tasks}[](4)
|
||||
\task \mycircle{1}
|
||||
\task \fbox{\mycircle{2}}
|
||||
\task \mycircle{3}
|
||||
\task \mycircle{1}\mycircle{2}\mycircle{3}
|
||||
\end{tasks}
|
||||
\begin{verification}
|
||||
\begin{minted}{sql}
|
||||
DROP TABLE if EXISTS test3;
|
||||
CREATE TABLE IF NOT EXISTS test3(name varchar(255));
|
||||
INSERT INTO test3 VALUES ('Li Ming'), ('Fang Li'), ('Tang Li Zhi');
|
||||
SELECT NAME FROM test3 WHERE NAME like '%Li';
|
||||
\end{minted}
|
||||
\includegraphics[width=0.3\linewidth]{imgs/2024-09-27-09-24-05.png}
|
||||
\end{verification}
|
||||
\item 对于以下4个查询,有哪些语句返回值为NULL
|
||||
\begin{enumerate}[label=\mycircle{\arabic{enumii}}]
|
||||
\item SELECT (!NULL)
|
||||
\item SELECT (NULL \&\& 1)
|
||||
\item SELECT (NULL || 1)
|
||||
\item SELECT (NULL XOR 1)
|
||||
\end{enumerate}
|
||||
\begin{tasks}[](4)
|
||||
\task \mycircle{1}\mycircle{4}
|
||||
\task \mycircle{2}\mycircle{3}
|
||||
\task \fbox{\mycircle{1}\mycircle{2}\mycircle{4}}
|
||||
\task \mycircle{1}\mycircle{2}\mycircle{3}\mycircle{4}
|
||||
\end{tasks}
|
||||
\item 以下哪条删除记录正确的
|
||||
\begin{tasks}[](2)
|
||||
\task \fbox{delete from emp where name='dony';}
|
||||
\task delete * from emp where name='dony';
|
||||
\task drop from emp where name='dony';
|
||||
\task drop * from emp where name='dony';
|
||||
\end{tasks}
|
||||
\questionandanswer[]{
|
||||
上机题:
|
||||
|
||||
写出向员工表(employee)插入如下记录的sql:
|
||||
|
||||
姓名:李四
|
||||
|
||||
员工编号:19
|
||||
|
||||
入职日期:2022-9-22
|
||||
|
||||
离职日期:无
|
||||
|
||||
职位名称:出纳员
|
||||
|
||||
分支机构编号:1
|
||||
|
||||
部门编号:2
|
||||
|
||||
上级领导编号:4
|
||||
}{}
|
||||
\begin{minted}{sql}
|
||||
insert into employee (LAST_NAME, FIRST_NAME, EMP_ID, START_DATE, END_DATE,
|
||||
TITLE, ASSIGNED_BRANCH_ID, DEPT_ID, SUPERIOR_EMP_ID)
|
||||
values ("李", "四", 19, "2022-9-22", null, "出纳员", 1, 2, 4);
|
||||
\end{minted}
|
||||
\questionandanswer[]{
|
||||
上机题:
|
||||
|
||||
写出向上一条记录职位修改为’出纳主任’的sql
|
||||
}{}
|
||||
\begin{minted}{sql}
|
||||
update employee set TITLE = "出纳主任" where EMP_ID = 19;
|
||||
\end{minted}
|
||||
\questionandanswer[]{
|
||||
上机题:
|
||||
|
||||
写出删除交易记录表(acc\_transaction)中交易时间(TXN\_DATE)在2012-01-01之前的交易记录的SQL
|
||||
}{}
|
||||
\begin{minted}{sql}
|
||||
delete from acc_transaction where TXN_DATE < "2012-01-01";
|
||||
\end{minted}
|
||||
|
||||
\questionandanswer[]{
|
||||
上机题:
|
||||
|
||||
officer 单位联系人信息表中用到了哪几种基本数据类型,这几种数据类型的特性是什么?
|
||||
}{
|
||||
int, date, varchar。
|
||||
|
||||
\begin{itemize}
|
||||
\item int的特性是用来存储整数,一般占用4个字节,可以存储从 -$2^{31}$ 到 $2^{31}-1$ 的整数值;
|
||||
\item date的特性是用来存储日期,可以进行日期相关的运算;
|
||||
\item varchar的特性是用来存储可变长度的字符串,其参数用来指定最大长度。
|
||||
\end{itemize}
|
||||
}
|
||||
|
||||
\questionandanswer[]{
|
||||
日期时间类型中,DATETIME和TIMESTAMP的最大值是一样的,并且这两个类型值都与时区有关。上述说法是否正确,请指正。
|
||||
}{
|
||||
不正确。最大值不同,datetime的最大值为9999-12-31 23:59:59,timestamp的最大值是2037-12-31 23:59:59;且datetime一般是无时区的,而timestamp一般是有时区的。
|
||||
}
|
||||
\questionandanswer[2.7]{
|
||||
请考虑图 \ref{fig:2-18} 的银行数据库。假设支行名称和客户ID分别能够唯一标识支行(branch)和客户(customer),但贷款(loan)和账户(account)可以与多位客户相关联。
|
||||
}{}
|
||||
\begin{figure}[H]
|
||||
\begin{minted}[frame=single]{text}
|
||||
branch(branch_name, branch_city, assets)
|
||||
customer (ID, customer_name, customer_street, customer_city)
|
||||
loan (loan_number, branch_name, amount)
|
||||
borrower (ID, loan_number)
|
||||
account (account_number, branch_name, balance)
|
||||
depositor (ID, account_number)
|
||||
\end{minted}
|
||||
\caption{银行数据库}\label{fig:2-18}
|
||||
\end{figure}
|
||||
\begin{enumerate}
|
||||
\questionandanswer[]{
|
||||
每个关系适当的主码属性是什么?
|
||||
}{}
|
||||
{
|
||||
\begin{minted}{text}
|
||||
branch 的主码为 branch_name
|
||||
customer 的主码为 ID
|
||||
loan 的主码为 (loan_number, branch_name)
|
||||
borrower 的主码为 (ID, loan_number)
|
||||
account 的主码为 (account_number, branch_name)
|
||||
depositor 的主码为 (ID, account_number)
|
||||
\end{minted}
|
||||
}
|
||||
\questionandanswer[]{
|
||||
确定每个关系适当的外码属性。
|
||||
}{}
|
||||
{
|
||||
\begin{minted}[fontsize=\small]{text}
|
||||
branch 无外码
|
||||
customer 无外码
|
||||
loan 的外码为 loan_number -> borrower.loan_number, branch_name -> branch.branch_name
|
||||
borrower 的外码为 ID -> customer.ID, loan_number -> loan.loan_number
|
||||
account 的外码为 account_number -> depositor.account_number, branch_name -> branch.branch_name
|
||||
depositor 的外码为 ID -> customer.ID, account_number -> account.account_number
|
||||
\end{minted}
|
||||
}
|
||||
\end{enumerate}
|
||||
|
||||
\questionandanswer[2.10]{
|
||||
请讨论命令式、函数式与声明式语言的相对优点。
|
||||
}{
|
||||
\begin{itemize}
|
||||
\item 命令式语言的优点是可定制化强,由于每一步计算都可以修改,所以可以自己实现某些复杂功能;
|
||||
\item 函数式语言的优点是不会产生副作用,即不会意外更改数据库的内容,比较便于实现原子操作;
|
||||
\item 声明式语言的优点是上手容易,只需要把所需的信息准确描述出来,就可以获取到信息。
|
||||
\end{itemize}
|
||||
}
|
||||
|
||||
\questionandanswer[6.5]{
|
||||
关系代数的\textbf{除法算子}“$\div$”定义如下:令$r(R)$和$r(S)$代表关系,且$S \subseteq R$;也就是说,模式$S$的每个属性也在模式$R$中。给定一个元组$t$,令$t[S]$代表元组$t$在$S$中属性上的投影。那么,$r \div s$是在$R-S$模式上的一个关系(也就是说,该模式包含所有在模式$R$中但不在模式$S$中的属性)。元组$t$在$r \div s$中的充分必要条件是满足以下两个条件:
|
||||
\begin{itemize}
|
||||
\item $t$在$\Pi_{R-S}(r)$中。
|
||||
\item 对于$s$中的每个元组$t_s$,在$r$中存在一个元组$t_r$同时满足如下条件:
|
||||
\begin{enumerate}
|
||||
\item $t_r[S] = t_s[S]$。
|
||||
\item $t_r[R-S] = t$。
|
||||
\end{enumerate}
|
||||
\end{itemize}
|
||||
给定上述定义:
|
||||
}{}
|
||||
\begin{enumerate}
|
||||
\questionandanswer[]{
|
||||
请使用除法算子写出一个关系代数表达式,来找出选修过全部计算机科学课程的所有学生的ID。(提示:在进行除法运算之前,将 takes 投影到只有ID和course\_id,并用选择表达式来生成全部计算机科学课程的course\_id集合。)
|
||||
}{
|
||||
$$
|
||||
\begin{aligned}
|
||||
&a \leftarrow \Pi_{(ID, course\_id)}takes\\
|
||||
&ids \leftarrow \Pi_{course\_id} (\sigma_{dept\_name="\text{Comp. Sci.}"}(course\_dept)) \\
|
||||
&a \div ids \\
|
||||
\end{aligned}
|
||||
$$
|
||||
}
|
||||
\questionandanswer[]{
|
||||
请展示如何在不使用除法的情况下用关系代数编写上述查询。(通过这样做,你也展示了如何使用其他的关系代数运算来定义除法运算。)
|
||||
}{
|
||||
|
||||
$$
|
||||
\begin{aligned}
|
||||
&a \leftarrow \Pi_{(ID, course\_id)}takes\\
|
||||
&ids \leftarrow \Pi_{course\_id} (\sigma_{dept\_name="\text{Comp. Sci.}"}(course\_dept)) \\
|
||||
&\Pi_{ID} (\sigma_{course\_id \in ids}(a)) \\
|
||||
\end{aligned}
|
||||
$$
|
||||
}
|
||||
\end{enumerate}
|
||||
\questionandanswer[6.12]{
|
||||
对于大学模式,请用关系代数编写如下查询:
|
||||
}{}
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=0.5\linewidth]{imgs/2024-09-25-21-03-29.png}
|
||||
\caption{由图6-15的E-R图中的实体集导出的模式}\label{fig:6-16}
|
||||
\end{figure}
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=0.7\linewidth]{imgs/2024-09-25-21-04-08.png}
|
||||
\caption{由图6-15的E-R图中的联系集导出的模式}\label{fig:6-17}
|
||||
\end{figure}
|
||||
\begin{enumerate}
|
||||
\questionandanswer[]{
|
||||
请找出物理系中每位教师的ID和姓名。
|
||||
}{
|
||||
$\Pi_{(ID, name)} (\sigma_{dept\_name="\text{Physics}"}( instructor \bowtie inst\_dept))$
|
||||
}
|
||||
\questionandanswer[]{
|
||||
请找出位于“Watson”教学楼的系里的每位教师的ID和姓名。
|
||||
}{
|
||||
$\Pi_{(ID, name)} (\sigma_{building="\text{Watson}"}(department\_name) \bowtie inst\_dept \bowtie instructor)$
|
||||
}
|
||||
\questionandanswer[]{
|
||||
请找出至少选修过“Comp. Sci.”系的一门课程的每名学生的ID和姓名。
|
||||
}{
|
||||
$\Pi_{(ID, name)} (\sigma_{dept\_name="\text{Comp. Sci.}"}(course\_dept) \bowtie takes \bowtie student)$
|
||||
}
|
||||
\questionandanswer[]{
|
||||
请找出在2018年至少上过一个课程段的每名学生的ID和姓名。
|
||||
}{
|
||||
$\Pi_{(ID, name)} (\sigma_{year="\text{2018}"}(sec\_course) \bowtie takes \bowtie student)$
|
||||
}
|
||||
\questionandanswer[]{
|
||||
请找出在2018年未上过任何一个课程段的每名学生的ID和姓名。
|
||||
}{
|
||||
$\Pi_{(ID, name)}(student) - \Pi_{(ID, name)} (\sigma_{year="\text{2018}"}(sec\_course) \bowtie takes \bowtie student)$
|
||||
}
|
||||
\end{enumerate}
|
||||
\end{enumerate}
|
||||
\end{document}
|
Loading…
Reference in New Issue
Block a user