【问题标题】:How to relate table with one of many others?如何将表格与许多其他表格之一联系起来?
【发布时间】:2013-10-05 11:43:07
【问题描述】:

我对我的数据库设计有点困惑。我有orders 表,其中可能包含来自许多其他人之一的记录。那么是否可以将每个表与 1:1 关联到orders。请看ordersdomainshostings表关系。

我的orders 表行的domainhosting 与其orders_type 值有关。

【问题讨论】:

    标签: mysql database database-design foreign-keys er-diagrams


    【解决方案1】:

    您是在问订单是否应该与域具有 1:1 的关系以及与主机的另一个 1:1 关系?如果你是,答案是否定的。您的托管表有一个 orders_id,这意味着您可以拥有多个具有相同订单的主机,即 orders:hosting 是 1:M。

    {关于域,orders:domains => 1:M}

    【讨论】:

    • 是的,我要问的是,订单只能有托管记录或域记录。一条记录中不能有多个主机和/或多个域。这种关系错了吗?
    • 您希望一份订单只有一个主机或只有一个域,并且永远不要两者兼有。在您的订单表中放置一个 domain_id 和一个 hosting_id 字段。该数据库将确保您只能拥有一个域或一个主机。您的应用程序需要确保您不会尝试将其中一个放入数据库中。 (从技术上讲,您可以在桌面上放置一个触发器来执行该业务规则。)
    • 那么,如果 order 是域订单,则 hosting_id 将为空。将有近 10 种不同的产品尚未在图表中看到。为每个产品创建一个专栏不是一个糟糕的设计吗?我应该使用TRIGGER来配合上图吗?
    • 产品? {现在忘记触发器的想法。}你是说至少还要定义 8 个表吗?为什么它们不在上图中?如果是这样,你真的需要 10 张表,还是因为字段重叠而可以更少使用?
    • 这张图只是初稿,我首先在构建结构。考虑将有serversssl_productsvpslicencessecurity_productsdomainshostings 等表。 orders 记录将只有其中一个,它将由其 orders_types_id 决定。我在考虑每个这些产品都会与orders 表有 1:1 的关系。我不确定会不会好,或者我应该怎么做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    相关资源
    最近更新 更多