表格设计和效率

时间:2018-04-25 11:37:36

标签: oracle database-design oracle12c

我正在为oracle 12c设计一个数据库,用于我的大学任务,并且在我的设计中达到了一个点,我无法获得有关它的更多信息。

我的作业情景

您已与英国互联网服务提供商签订合同,彻底检修其内部软件系统。该组织提供宽带,光纤连接,电话,IPTV和4G连接以及几个特定的​​定制开发。客户群主要是通过大学提供服务的学生。他们目前使用MyISAM数据库引擎运行一系列遗留MySQL数据库,因此没有适当的关系。

我的问题

如果发生RIPA请求,存储的有关学生的所有信息(包括通过跟踪收集的所有信息)都应作为单个查询进行访问。

RIPA请求

基本上RIPA请求是指政策想知道某个人在使用互联网,电话等时所做的一切。

我该怎么办呢?在数据库中设计我的表时,我应该有一个单独的表来收集所有这些信息吗?表格中有一堆外键与学生一直在做什么?

更新 以下是我的其余任务,只是为了更多关于我的问题和好奇的信息。

互联网服务提供商要求用户提供以下服务:

学生

•学生能够注册并购买由其大学量身定制的产品

•学生可以在应用程序,网站,内联网和IPTV平台上查看公告牌。

•应向学生收取使用经常性产品的费用。

•使用互联网和电话时应跟踪学生活动。大学内的路由器将发出可配置的REST API查询,该查询提供被访问的URL以及有关学生和位置的详细信息。还可以通过可配置的REST API查询来跟踪电话号码,电话号码,呼叫持续时间和呼叫时间。

•电话需要适当的信用余额;电话所连接的路由器将发出API请求,以减少整个呼叫中的呼叫余额。

•学生可以对布告栏项目发表评论,其他学生可以对这些评论发表评论。

•学生可以使用学券,使学生能够按固定金额或成本的百分比支付项目费用或降低项目成本。应保留使用的凭证记录。

•观看的电视内容应该用于广告目的。 IPTV系统将请求一个可配置的API,用于提供正在观看的频道,学生电子邮件和时间。

•学生需要登录才能访问布告栏,宽带,电话,IPTV和4G连接;这是在首次登录后存储在单个设备上的。

•能够通过即时消息,电话和电子邮件获得支持。

大学教职员

•大学应该能够添加公告板项目。

•大学应该能够控制向学生提供的产品,应该有限制以确保大学不会过度使用连接。

•公告板内容可以针对特定层次,从特定大学开始,然后是大学内的宿舍,最后是定制学生团体(当然,俱乐部等),这些团体应由大学指定。< / p>

•大学工作人员将要求使用统计数据。

•大学工作人员需要利用管理区域进行更改

互联网服务提供商员工

•ISP应该能够管理连接限制

•如果发生RIPA请求,存储的有关学生的所有信息(包括通过跟踪收集的所有信息)都应作为单个查询进行访问。

•ISP通过电子邮件,电话和即时消息三种方式提供支持。支持电子邮件和回复在现有服务器上进行管理;这将发出一个可自定义的REST API查询,该查询将提供学生的电子邮件地址,电子邮件主题,电子邮件正文,日期和时间。通过桌面软件手动记录电话,包括呼叫的学生的详细信息和查询的性质。即时消息记录在数据库中,用于管理即时消息系统。

•应该可以为学生使用创建优惠券;这些优惠券应受时间限制,有多少学生使用,以及每位学生的使用次数。凭证应该可以通过随机代码访问。

•ISP管理层需要有关使用和销售的统计数据。

•ISP员工必须先批准新产品才能向学生展示

•ISP员工应使用桌面软件进行任何更改。

包含以下可选扩展程序将允许您获得更高的评分(请参阅评分标准 - 实施)。

•房间维修 - 学生可以要求维修房间。当他们登录到网站时,他们可以指定他们的房间问题。不需要提供房间号。

•免费客人无线网络 - 客人可以注册免费使用WIFI。客人需提供家庭住址,电子邮件地址和电话号码。必须先确认电话号码才能访问WIFI,这是通过现有服务器进行管理的,该服务器根据REST API请求发送文本消息,并在确认后发出REST API查询。

2 个答案:

答案 0 :(得分:1)

一般来说,我会先创建一个纯粹的&#34;关系模型,基于你所知道的。然后,您可以查看是否需要做任何聪明的事情来满足特定的RIPA查询要求。

您描述的实体是:

  • 系统有很多客户
  • 客户有一个或多个服务
  • 服务具有类型(宽带,电视,4G等)
  • 服务有0个或更多可监控的事件
  • 活动有类型(打电话,看电视节目,请求网址等)。
  • 一个事件有数据;每种事件类型都有不同的数据模式

很可能还有很多其他有趣的事情需要建模 - 结算数据等 - 但您的情景并未提及它们,所以我不会担心它们。

如果上面的实体是正确的,那么您的架构非常明显:

Customer
-----------------
CustomerID (PK)
Name
...

Service
--------------
ServiceID (PK)
Name
Type
.....

CustomerService
--------------------------
CustomerID (FK)
ServiceID (FK)


Event
-------------------------
CustomerID (FK)
ServiceID (FK)
Type
Date
Event_Data

剩下的挑战是&#34;我们如何存储事件数据&#34;?由于您没有指定除&#34;以及#34;以外的任何要求,我建议使用文本字段来存储原始数据,或建议XML / JSON以允许更智能的查询(例如&# 34;找到有人开始在IPTV上观看Homeland的所有活动&#34;) - 但是由于您没有指定此要求,您可能不需要这样做。

您的RIPA查询类似于:

select customer.*, 
       service.*, 
       customer_service.*,
       event.*
from customer
inner join customer_service on customer.customerID = customer_service.customer_id
inner join service on customer_service.service_id = service_service_id
inner join event on customer.customer_id = event.customer_id
inner join event on service.service_id = event.service_id
where customer_id = ?

答案 1 :(得分:0)

您可以拥有一个用于维护用户的表,另一个用于维护服务的表。然后是另一个映射用户和服务的表。

这将允许您轻松添加/更新/删除服务。可以通过使用标志将服务标记为非活动来完成删除。这将允许保留旧数据,而新数据将不会使用这些服务。

更新: 您的用户表和服务表不会直接通过密钥相互链接。原因是用户和服务之间存在多对多的关系。一个用户可以拥有许多服务,并且许多用户可以使用每个服务。

相反,UserServiceMap表将同时具有用户和服务ID作为外键。在获取数据时,您可以连接三个表并获得结果。映射表应该有自己的主键,而不是使用复合键。这将有助于用户停止和重新启动服务。