资源描述
将E-R图转换为关系模型的转换规则如下:
•1) 实体集转换为关系
–实体集对应于一个关系
–关系名:与实体集同名。
–属性:实体集的所有属性。
–主码:实体集的主码。
•
2) 联系转换为关系
联系转换成为关系模式。联系转换成为关系模式时,要根据联系方式的不同采用不同的转换方式
①1:1联系的转换方法
a) 将1:1联系转换为一个独立的关系:与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,且每个实体的码均是该关系的候选码。
第一步:联系形成的关系独立存在:
职工表(职工号,姓名,年龄)主码:职工号
产品表(产品号,产品名,价格)主码:产品号
负责(职工号,产品号)主码:职工号或产品号
合并方案1:“负责”与“职工”两关系合并:
职工(职工号,姓名,年龄,产品号)
产品(产品号,产品名,价格)
合并方案2:“负责”与“产品”两关系合并:
职工(职工号,姓名,年龄)
产品(产品号,产品名,价格,职工号)
b) 将1:1联系与某一端实体集所对应的关系合并,则需要在被合并关系中增加属性,其新增的属性为联系本身的属性和与联系相关的另一个实体集的码。
② 1:n联系的转换方法
a)一种方法是将联系转换为一个独立的关系,其关系的属性由与该联系相连的各实体集的码以及联系本身的属性组成,而该关系的码为n端实体集的码;
步骤一:联系形成的关系独立存在。
仓库(仓库号,地点,面积)
主码:仓库号
产品(产品号,产品名,价格)
主码:产品号
仓储(仓库号,产品号,数量)主码:产品号
合并后方案:联系形成的关系与n端对象合并。
仓库(仓库号,地点,面积)
产品(产品号,产品名,价格,仓库号,数量)
b)另一种方法是在n端实体集中增加新属性,新属性由联系对应的1端实体集的码和联系自身的属性构成,新增属性后原关系的码不变。
③ m:n联系的转换方法
在向关系模型转换时,一个m:n联系转换为一个关系。转换方法为:与该联系相连的各实体集的码以及联系本身的属性均转换为关系的属性,新关系的码为两个相连实体码的组合(该码为多属性构成的组合码)。
•该模型包含两个实体集(学生、课程)和一个m:n联系
•该模型可转换为三个关系模式:
–学生(学号,姓名,性别,年龄)主码:学号
-课程(课程号,课程名,学分)主码:课程号
–选课(学号,课程号,成绩)主码:学号+课程号
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CalculatorJFrame extends JFrame implements ActionListener
{
private JTextField text; //显示计算结果的文本行
private char op; //当前运算符
private float value; //当前计算结果值
private boolean first; //表示是否为数值的第1个数字
public CalculatorJFrame()
{
super("计算器");
this.setSize(280,210);
this.setLocation(300,240);
this.display(); //显示图形用户界面
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
op='+';
value=0.0f;
first=true;
}
private void display() //图形用户界面
{
text = new JTextField("0.",30);
text.setHorizontalAlignment(JTextField.RIGHT); //设置对齐方式,右对齐
text.setEditable(false); //只能显示,不允许编辑
this.getContentPane().add(text,"North");
JPanel panel = new JPanel(new GridLayout(5,4,5,5));//面板采用网格布局
this.getContentPane().add(panel);
String str[]={"sqrt","+/-","Backspace","C","7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};
JButton buttons[] = new JButton[str.length];
for (int i=0; i<buttons.length; i++)
{
buttons[i] = new JButton(str[i]);
panel.add(buttons[i]);
buttons[i].addActionListener(this); //为按钮注册单击事件监听器
}
}
public void actionPerformed(ActionEvent e) //按钮单击的事件处理方法
{
String current = e.getActionCommand(); //获取按钮标签
if (current=="C") //清除
{
text.setText("0."); //重新设置文本内容
value = 0.0f;
first = true;
return;
}
if (current=="Backspace") //退格
{
String str=text.getText().substring(0,text.getText().length()-1);
text.setText(str);
if (str=="")
{
text.setText("0.");
first = true;
}
return;
}
if (current.charAt(0)>='0' && current.charAt(0)<='9' || current==".") //0~9数字按钮
{
if (first)
{
text.setText("");
first = false;
}
text.setText(text.getText()+current);
}
else
{
System.out.print(""+value+op+text.getText()+"=");
switch (op)
{
case '+': value += Float.parseFloat(text.getText());break; //转换成浮点数后运算
case '-': value -= Float.parseFloat(text.getText());break;
case '*': value *= Float.parseFloat(text.getText());break;
case '/': value /= Float.parseFloat(text.getText());break;
}
System.out.println(""+value);
text.setText(""+value);
op = current.charAt(0); //字符串中取第1个字符
first = true;
}
}
public static void main(String arg[])
{
new CalculatorJFrame();
}
}
展开阅读全文