我是数据库设计的新手,所以我有点不确定我在这里做的事情是否正确。
我在为一个假滑板车租赁服务建立一个数据库。以下是可能影响我的数据库的事件:
如果新顾客进入商店:
Store customer info,
If they were referred:
Make note of name of referrer
如果以前的客户输入:
Retrieve previous customer info,
**If this customer has an un-returned scooter, they can't borrow another
如果客户租用滑板车,请跟踪:
Date/hour of borrow,
Date/hour of return,
How much paid,
Freeform notes that are categorized, ie Issues while scooter is returned or when used
返回踏板车时:
When it was returned,
Is return late,
Is scooter damaged,
Additional fees for damage / late return
我将对数据库进行查询:
所有有旗帜的人,
所有可用的滑板车,
所有借来的摩托车,
所有迟到的摩托车,
前5名推荐最多的人,
对一个人来说,展示他借过摩托车的所有时间,
对于借款,显示任何额外费用,以及
所有摩托车制造商
下面是我想到的(还不是一个实际的图表,只是不同的表和关系),根本不确定这是否在正确的轨道上:https://imgur.com/a/nzqb0ce
2条答案
按热度按时间dgjrabp21#
没有任何“复数”列。相反,使用另一个表链接回该表。示例:推荐、借用示例。
“前5名推荐最多的人”将更容易从上面提到的额外表格中查询。
如何判断滑板车目前是否在使用中?可能是滑板车。有空吗?请注意,当指示器“take”和“returned”时,可能需要插入/更新多个表。
“所有迟到的指示器”可能很难从建议的模式中确定。您可能需要另一个表,重点放在'销售'。也就是说,在借用踏板车时添加一行;也许事情会随着时间的推移而改变;当指示器“returned”时,行被标记为“complete”(可能没有删除)。注:此表为查看“转手”的“货币”的人提供了简单的信息。它也可能为“过去租用的滑板车”提供一个来源,我在上面批评了这一点。
因此,我建议再增加3个表,并将一些列移到这些表中。
转介。。。
不应尝试将数组放入列中。它凌乱、笨拙等。相反,创建另一个表(
Referrals
)把它链接回主表(Customers
).当您有“多对1”Map(“一个”客户的“多”转介)时:
这允许许多“名称”引用一个“客户id”。
如果“推荐”必然是其他客户,那么您有一个多对多表:
wbrvyc0a2#
正确的。你的设计有一些问题。sqldb中的思想是“规范化”信息,这意味着没有重复的数据。这是一件需要记住的事情,另一件是,你必须从“实体”和这些实体之间的“关系”来思考,而不是从对象和动作的Angular 来思考。让我们看看:
所以这里的“rentals”是一个多对多的表,它将一个客户与一个客户联系起来,这个客户可以租用多辆滑板车,而一辆滑板车在它的生命周期中会有很多客户。customerid和scooterid可以是mysql中的自动行id,也可以在特定的id字段中显式设置它们。
通过此设置,您可以通过设计查询获得大量信息:
有滑板车吗?
也就是说,踏板车是租来的,将来某个时候会被归还。
我们有摩托车迟到吗?
也就是说,应该已经归还但还没有归还的滑板车。
等等。希望有帮助!