【问题标题】:SQL design - should I be using many-to-many?SQL 设计 - 我应该使用多对多吗?
【发布时间】:2013-12-04 01:49:00
【问题描述】:

首先,我是 StackOverflow 的新手,在发布之前我已尽力搜索此问题的相关答案。如果我错过了可以回答我的问题的先前问题,我们深表歉意。

我是数据库的新手,我正在研究如何正确地为场景建模。这将是一家航运公司的数据库。货物被提取并交付到不同的地点,无论是在某个地点取件还是交付都各不相同。也就是说,有一天他们可能会将货物运送到位置 1,另一天他们可能会在位置 1 取货并在不同的位置进行运送。每个 Shipment 都有一个起始位置和目的地位置。

起初我创建了一个 Shipments 表和一个 Locations 表,但我不确定如何正确地将它们相互关联起来。我应该在两者之间有一个关联的 ShipmentsLocations 表,还是应该将这些列合并到现有表中?存储两个位置的正确方法是什么,一个用于取货,一个用于交付,因为它们都是位置实体?还是我的餐桌设计本身有缺陷?

提前感谢您提供的任何帮助,让我朝着正确的方向前进。我仍在努力思考这些概念!

【问题讨论】:

    标签: sql sql-server database-design many-to-many


    【解决方案1】:

    对于取件和交付,我不会使用多对多的关系,而是会在货件表中添加两列。这可能会简化我能想到的大多数普通查询。而且,更重要的是,这将让您轻松执行“货件”不具有多个交货地点且不具有多个来源地点的规则。

    也就是说:

    Shipment(Shipment_Id, Origin_Location_Id, Delivery_Location_Id, ...)
    Location(Location_Id, ...)
    

    【讨论】:

    • 嗯,这对我来说是一个拍脑门的时刻。在我读过的所有文本/示例中,一个表中的 FK 总是与另一个表中的 PK 完全匹配。我没有意识到我可以有多个列,命名不同,作为另一个表的同一个 PK 的 FK!
    猜你喜欢
    • 2015-05-27
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多