我尝试设计包含街道停车数据的数据库。停车有gps坐标,按天限制时间,星期几规则(允许某些天,其他限制),免费或付费状态。最后,我需要做一些可以按标准指定停车的查询。 对于第一次透支,我尝试做这样的事情:
Pakring
-------
parkingId
Lat
Long
Days (1234567)
Time -- already here comes trouble
但是它没有正常化并且很快就会溢出数据库。如何以最佳方式设计数据?
更新目前我有两种方法 第一个是:
我尝试使用具有多对多链接的限制表。(这是几天和几个月的示例)。但查询会很复杂,我现在不知道如何将时间与日期联系起来。 第二种方法是:
使用一个带有Type字段的受限表,它将具有优先级。但是这个解决方案也没有正常化。 只是为了清楚我有什么数据。
PakingId Coords String Description(NO PARKING11:30AM TO 1PM THURS)
我想向用户显示他可以按地区,时间和日期找到街道停车位。 感谢所有人的帮助和时间。
答案 0 :(得分:1)
这似乎是一项艰巨的任务。只是一些想法。
你只关心街边停车吗?停车场有多层楼,所以除非你留在街上,否则GPS坐标将无法使用。
坐标的准确度是多少?通过其他标准单独识别每个停车位会更容易吗?就像彩绘停车广场的唯一标识符一样。 (但是如果人们没有停在广场上会发生什么?或者由于非法停车而导致GPS坐标失误/不够准确?你打算保留停车票的记录吗?)
有些人想到需要考虑的表格或信息:
上面的三个或四个表可以通过中间表链接,该中间表显示每个可能停车时间的停车位的属性(如所有可能组合的原型)。该信息可以链接到另一个表格中,您可以在其中保存实际停车事件的记录(例如,如果需要,您可以保留已经支付或未支付账单的人员的记录)。
有很多东西影响你的实施,所以你真的需要列出停车位的所有规则(和事件?)。在您了解保存记录所需事件的属性之后,可以稍后完成(并重做)数据库结构。这就是一切的关键:了解您的需求这样做可以设计和创建实现。如果实现(应用程序)不起作用,则更改实现。如果设计错误重新设计。如果你没有看到整个过程(你真正需要的),你所做的一切都将失败。 (除非你非常幸运,但我不会指望运气......)
答案 1 :(得分:0)
尝试使用两个表格,并在它们之间使用交叉点实体。
桌面停车将有parking_id,lat和long列。表限制将具有您在场景中具有的所有类型的限制,例如restriction_id,restriction_day,restriction_time和restriction_status以及restriction_type。
然后,您可以使用交集实体中的外键约束链接这两个表。
示例parking_id有restriction_id。
这样,停车场可以有多个限制,并且可以对多个停车场施加限制。
答案 2 :(得分:0)
由于您似乎听说过规范化,并且遵循Damien的评论,您应该使用不同的表来表示不同的事物。
然后您应该考虑如何将这些表链接在一起,并在此过程中定义2之间的关系类型。可以是一对一(这一个是您可能想要把所有内容放在一起的那个同一个表,但链接表中的一个简单的外键是更清晰的),一对多(如果你把所有东西放在一个表中就会出现麻烦,因为现在链接表中会有几行相同的外键,如果所有内容都在同一个表中,则必须对该表中的字段进行myltiply,或者多对多(在这里您只需要添加一个表来建立其他2个表之间的链接,因此有两个外键字段指向两个表中的记录。)
例如,在您的情况下,Parking
表可以保存停车名称,坐标等。
第二张表TimeTable
可以保存每个停车场的开放日期/时间,其中一个外键是parkingId(使其成为一对多的关系,1个停车场可以有许多开放帧)。该表的字段可以是例如DayOfWeek(表示日期的数字),openingTime,closingTime。这将允许您在同一天定义多个时间帧,或者单个时间帧(例如,如果它始终打开),在这种情况下,在此表中为此停车提供7条记录(=>一对多关系)。
然后你可以设想第3个表Price
,你可以在那里放置有关该停车价格的数据(可能也是一对多,有小时费率记录/长期停留/ ......等等,取决于需要和需要表达的不同“对象”。
请注意这些只是粗略的例子。数据库设计有时可能非常棘手,而且我不是专家,但我认为这些建议可以帮助您更进一步,如果您遇到问题,可以回过头来解决另一个问题。
祝你好运!