我设计DB的经验不多。虽然我有一些粗略的理论知识。
所以,关于我的问题。我们有一堆excel文件的数据(耶,惊喜!)我们想把他们转移到数据库。
为了简化,让我们假设系统是一个集中报警系统。数据从远程收集并显示在一个集中的监控室。每个位置都有一个唯一的名称和多个设备。在一个位置内,设备名称是唯一的,并且该设备具有多个警报。在设备内部,警报名是唯一的。
在每个位置,我们有一个或多个终端单元(TU),它聚集在该位置的警报并发送它。每个TU都有一堆卡在里面,每个TU都有独特的身份证。每一张卡都有一个接线终端,用于每个报警,每个卡有一个唯一的地址。
这些实体中的任何一个都可以重命名/重新定义。
正如您所看到的,数据是高度分层的。我需要存储每条线路的历史联系-报警分配(关系)。警报可以将它的任务从一个联系人更改为另一个联系人。
Location TU
| |
+- Device +- Card
| |
+-- Alarm +--Contact
| |
+----Alarm-Contact----+My :我为上面所示的每个实体创建了一个表。我用人工主键作为自动增量整数。层次结构( Tn )中的表将对组成(Tn.name,Tn-1.pk,Tn-2.pk,.)具有唯一性约束,其中Tn是层次结构中的表(N)深度,(pk)是表的主键。
我将使用Server,并且对自动增量整数PK有疑问。假设我有10张唱片,除了最后一张(第10张)之外,我全部删除了。下一次添加的记录将编号为11,还是DBMS将其重新编号为10 -> 1和新的-> 2。如果前者是正确的,如何解决PK溢出问题。
另一个问题是我应该如何对历史数据进行建模。我想我应该创建警报-联系-历史表与n-1的关系,警报-接触表。
谢谢
发布于 2009-04-11 10:46:30
如果您只是创建一个警报联系人历史表,您将不会创建一个准确的历史记录。假设每个卡可能被移动到另一个TU,您描述的历史记录将不知道当警报使用卡的联系人时卡安装在哪个TU中。
也许包含卡Id、TU Id、位置Id和设备Id的增强警报联系人历史记录会更好。这样,在生成历史记录时,您就可以得到精确配置的图片。如果有东西在中间的时间范围内移动,你不会介意的,因为你知道在那个时间点它是怎样的。
Server将继续增加分配给标识符的值。你预计会有多少张唱片?如果是大量(~ gt 21.4亿),我建议使用bigint作为标识符。
发布于 2009-04-11 12:50:27
我建议换个计划。
作为一个热身,将您的数据从Excel转换为MS Access。转换非常容易,因为Excel和Access是互操作的。
不要使用自动增量数字.相反,当插入新的数字时,请安排一个您用VBA或其他任何语言编写的函数来运行。创建自己的算法来控制一个新的数字的分配,而不是任由DBMS支配。
使用交互式查询构建器和MS Access中的此类工具可以帮助您获得实践或节省您的精力。但是使用SQL视图可以了解所有查询是如何工作的,即使您没有构建它们。
然后构建Server版本。抽象出MS Access特有的SQL方言特性,但使用您所学的大部分内容来构建原型。您的自动增量代码将处于触发器中。
哦,顺便说一下,别忘了你学到的理论。也许会派上用场。
https://stackoverflow.com/questions/739838
复制相似问题