技术周总结09.23~09.29周日(分布式)

一、09.25 周三

1.1)问题01: 分布式数据库的结构模式分为的全局外模式等,怎么理解

在讨论分布式数据库结构模式时,提到的“全局外模式”、“全局概念模式”、“局部概念模式”和“局部内模式”是根据Codd的数据库三级模式结构理论来定义的。这种模式结构适用于传统的集中式数据库系统,同样也适用于分布式数据库系统。以下是这些模式的解释:

  1. 全局外模式(Global External Schema)

    • 全局外模式是用户视图的一部分,它描述了最终用户所看到的数据视图。它是对全局概念模式的一个子集,通常是为了简化用户的使用而设计的。不同的用户可能有不同的全局外模式,因为每个用户只需要关心与其任务相关的那部分数据。
  2. 全局概念模式(Global Conceptual Schema)

    • 全局概念模式是对整个分布式数据库的完整描述,它定义了数据库中所有数据的整体逻辑结构。它是一个全局的数据模型,包含了所有实体、关系以及约束条件。全局概念模式是所有用户的公共视图,它是系统管理员用来确保数据一致性的工具。
  3. 局部概念模式(Local Conceptual Schema)

    • 局部概念模式定义了单个站点上的数据结构。每个站点都有自己的局部概念模式,它们共同构成了全局概念模式。局部概念模式描述了数据在各个站点上的具体分布情况。
  4. 局部内模式(Local Internal Schema)

    • 局部内模式是数据在单个站点上的物理存储方式,包括数据的实际存储格式、存储介质等细节。每个站点都有自己的局部内模式,这些模式共同决定了全局内模式。

总结来说,全局外模式是用户视角,全局概念模式是整体逻辑视图,局部概念模式是站点级逻辑视图,而局部内模式则是站点级物理存储视图。这些模式帮助我们理解和设计分布式数据库系统,确保数据的一致性和完整性,同时也支持不同的用户需求和优化存储策略。

好的,根据您的要求,以下是Python代码实现: ``` import csv constellation_list = [ ('Aries', '03.21-04.19'), ('Taurus', '04.20-05.20'), ('Gemini', '05.21-06.21'), ('Cancer', '06.22-07.22'), ('Leo', '07.23-08.22'), ('Virgo', '08.23-09.22'), ('Libra', '09.23-10.23'), ('Scorpio', '10.24-11.22'), ('Sagittarius', '11.23-12.21'), ('Capricorn', '12.22-01.19'), ('Aquarius', '01.20-02.18'), ('Pisces', '02.19-03.20') ] def get_constellation(month, day): day_in_month = [ 0, # 0 位未使用 20, # 1 - 1 月 50, # 2 - 2 月 79, # 3 - 3 月 110, # 4 - 4 月 141, # 5 - 5 月 172, # 6 - 6 月 203, # 7 - 7 月 234, # 8 - 8 月 265, # 9 - 9 月 295, # 10 - 10 月 325, # 11 - 11 月 355, # 12 - 12 月 ] if month < 1 or month > 12 or day < 1 or day > 31: return "输入日期错误!" if day < day_in_month[month]: return constellation_list[month-1][0] else: return constellation_list[month][0] def get_constellation_by_date(date): try: year = int(date[0:4]) month = int(date[4:6]) day = int(date[6:8]) except: return "输入日期错误!" return get_constellation(month, day) with open('const.csv', 'r', encoding="UTF-8") as csvfile: reader = csv.reader(csvfile) for row in reader: name = row[0] month = int(row[1]) day = int(row[2]) correct_name = get_constellation(month, day) if correct_name != name: print('有错:{} 的生日是{}月{}日,应该是{}座,而不是{}座'.format(name, month, day, correct_name, name)) print(get_constellation_by_date('19930918')) print(get_constellation_by_date('20200231')) ``` 上面的代码中,我们在代码最开始定义了星座列表`constellation_list`,里面存放了每个星座的名字及其起止日期。 接着,我们定义了一个`get_constellation()`函数,用于根据月份和日期计算对应的星座名称。该函数的实现过程为:首先,创建了一个存放每月最后一天的列表`day_in_month`,其中0位未使用,1~12位为相应月份的最后一天;然后,如果输入的月份或日期不合法,就返回一个“输入日期错误!”的提示;否则,当输入的日期小于相应月份的最后一天时,返回相应的星座名称,否则返回下一个月份的星座名称。 接着,我们定义了一个`get_constellation_by_date()`函数,用于读取`const.csv`文件并根据用户输入的出生日期获取对应的星座名称。该函数首先尝试将输入日期的年、月、日解析成整数,如果出错则返回一个“输入日期错误!”的提示;否则,调用`get_constellation()`函数计算对应的星座名称并返回。 最后,我们读取了`const.csv`文件并分别调用了`get_constellation_by_date()`函数获取了两个日期的星座名称,分别为白羊座和“输入日期错误!”(因为2月份只有28/29天,而这里输入的是30号,所以日期不合法)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值