复杂的数据库规范化

时间:2012-08-09 03:26:58

标签: database-normalization

我正在尝试为水务部门的在线系统建立一个数据库,跟踪每个帐户/米的所有过去使用情况。
数据库接收包含所有当天读数的csv文件。 我收到的csv有以下数据:

  • 帐号(一个帐号可能有多个电表/地址)
  • 地址
  • 仪表ID(可能有多个用于公寓大楼,商业建筑等的端口)
  • 端口号
  • 阅读(数字)
  • 阅读日期(字符串)
  • 仪表序列号(与仪表ID有关)
  • 安装日期(与仪表ID有关)

我开始考虑数据库设置,这是我得到的:

  • 仪表信息
    • Meter ID(主键)
    • Meter Serial
    • 安装日期
    • 地址
    • 端口数
  • 仪表用法(标题为我的仪表ID)
    • 阅读日期

我在考虑每个仪表都有自己的表,这个表名为仪表ID,这样可以轻松访问一米的过去数据,但会带来端口分离的问题。

下面,我如何区分仪表#000003的端口? http://s13.postimage.org/fczlkrrif/image.png
一个想法是将端口#附加到仪表ID#的末尾 即拥有0000031和0000032

所以我的主要问题是,处理可能有多个端口的仪表 一个帐户可能有多个米,可能有多个端口。

这将是我设置的第一个非伪数据库,所以非常感谢你们的任何帮助。

2 个答案:

答案 0 :(得分:1)

继续@Roger的思考过程,如果不能将它们拆分为单独的帐户,那么很多人不需要端口号#但是你应该有一个账号表,账号是PK,喜欢你的表表,也许是一个地址表,虽然如果您计划使用仪表表的地址表指向,这可能会变得复杂。此外,如果我是正确的,您的仪表序列号应该是唯一的,这样您就可以将它用作主键,而不是创建自动递增PK。您也不一定需要为每个仪表使用一个新表,您可以简单地使用MeterUsageTable With一个名为UsageID的Auto inc PK,带有米ID的MeterID读取日期和读数以及简单查询将能够为您提供所有历史记录。虽然如果您要进入公司完整的使用历史记录,它将累积大量数据。 编辑: 我想你希望你的数据库看起来像这样你可以调整你需要和不需要的东西,但这里是我认为你需要的关系,以便从AccountNumber转到使用 Possible Solution

答案 1 :(得分:0)

根据评论,我会建议以下内容:

帐户

ID 帐户ID 序列号 INSTALLATION_DATE 地址

meter_ports

meter_id

读数

meter_port_id reading_date 读

就地址而言,我不确定您是否会支持多个城市,州,邮政编码。如果愿意,您可以考虑将其正常​​化,以便您能够对某些邮政编码,城市等进行分组。