设有关系模式 R(演员编号,演员姓名,电影名,出演角色,艺术团名,团长 名),如果规定每个演员编号各不相同,演员姓名可以相同,一个演员可参演 多部电影,各出演一个角色;每个演员只能属于一个艺术团;每个艺术团只 有一个团长。 (1) 试写出关系模式 R 的基本 FD 和主键; (2) 说明 R 达到第几范式,并说明理由; (3) 如果 R 不是 3NF 模式,请将 R 分解为 3NF 模式集。
时间: 2023-10-23 15:12:41 浏览: 53
(1) 基本 FD:
- 演员编号 -> 演员姓名,艺术团名
- 电影名,出演角色 -> 演员编号
- 艺术团名 -> 团长名
主键为 (演员编号, 电影名, 出演角色)。
(2) R 是 BCNF,因为每个演员只能属于一个艺术团,因此演员编号 -> 艺术团名 的函数依赖中,演员编号是超键,而艺术团名不是候选键的一部分,因此不满足 BCNF。
(3) 将 R 分解为 3NF 模式集:
R1(演员编号, 演员姓名, 艺术团名),主键为演员编号;
R2(演员编号, 电影名, 出演角色),主键为(演员编号, 电影名, 出演角色);
R3(艺术团名, 团长名),主键为艺术团名。
相关问题
爬取豆瓣top100的电影名,时间,演员名,并储存在Excel表格中Python代码
好的,以下是Python代码:
```python
import requests
from bs4 import BeautifulSoup
import openpyxl
# 发送请求并获取网页内容
url = 'https://movie.douban.com/top250'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 创建Excel表格并添加表头
workbook = openpyxl.Workbook()
worksheet = workbook.active
worksheet.title = 'top100电影'
worksheet['A1'] = '电影名'
worksheet['B1'] = '时间'
worksheet['C1'] = '演员名'
# 获取电影名、时间、演员名,并添加到Excel表格中
for i in range(0, 100, 25):
url = f'https://movie.douban.com/top250?start={i}&filter='
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
movies = soup.find_all('div', class_='hd')
times = soup.find_all('div', class_='bd')
actors = soup.find_all('div', class_='bd')
for j in range(25):
movie_name = movies[j].a.span.text
time = times[j].p.text.split('\n')[1].strip().replace('\xa0/\xa0', '')
actor = actors[j].p.text.split('\n')[2].strip().replace('\xa0/\xa0', ', ')
worksheet.append([movie_name, time, actor])
# 保存Excel表格
workbook.save('top100电影.xlsx')
print('保存成功!')
```
这段代码会爬取豆瓣电影Top100的电影名、时间、演员名,并储存到一个名为 `top100电影.xlsx` 的Excel表格中。请注意,为了防止被反爬虫,我们在发送请求时加入了 `User-Agent` 头部信息。
爬取豆瓣top100的电影名,时间,演员名,并储存在Excel表格中Python代码xpath方法
好的,使用XPath方法,以下是Python代码:
```python
import requests
from lxml import etree
import openpyxl
# 发送请求并获取网页内容
url = 'https://movie.douban.com/top250'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
html = etree.HTML(response.text)
# 创建Excel表格并添加表头
workbook = openpyxl.Workbook()
worksheet = workbook.active
worksheet.title = 'top100电影'
worksheet['A1'] = '电影名'
worksheet['B1'] = '时间'
worksheet['C1'] = '演员名'
# 获取电影名、时间、演员名,并添加到Excel表格中
for i in range(0, 100, 25):
url = f'https://movie.douban.com/top250?start={i}&filter='
response = requests.get(url, headers=headers)
html = etree.HTML(response.text)
movies = html.xpath('//div[@class="hd"]//span[@class="title"]/text()')
times = html.xpath('//div[@class="bd"]//p[@class=""]/text()')
actors = html.xpath('//div[@class="bd"]//p[@class=""]/text()')
for j in range(25):
movie_name = movies[j]
time = times[j*2+1].strip().replace('\xa0/\xa0', '')
actor = actors[j*2+2].strip().replace('\xa0/\xa0', ', ')
worksheet.append([movie_name, time, actor])
# 保存Excel表格
workbook.save('top100电影.xlsx')
print('保存成功!')
```
这段代码会爬取豆瓣电影Top100的电影名、时间、演员名,并储存到一个名为 `top100电影.xlsx` 的Excel表格中。请注意,我们使用 `lxml` 库的 `etree` 类来解析HTML文档,并使用XPath表达式来选取所需的元素。同样地,为了防止被反爬虫,我们在发送请求时加入了 `User-Agent` 头部信息。