Database-Design

在實體關係圖中建模子類(或子類型)約束

  • June 2, 2016

場景描述

有人可以幫助我了解如何模擬以下情況:

  1. 有一個名為 的超類(或超類型PRODUCTS,它具有名為和的子類(或子類型) 。FOOD``SHOES
  2. 存在另一個名為 的超類CUSTOMERS子類名為SHOE STOREand GROCERY STORE
  3. 我需要代表一些規則來表明:
  • FOOD只能送到GROCERY STORES
  • SHOES可以獨家分發給SHOE STORES.

暫定圖表

我已經嘗試了下面顯示的兩個圖表:

圖表

圖表注意事項

上圖

我真的不喜歡重複 (a) 相同的實體類型,即 ,ORDERS和 (b) 圍繞它的關係。

底圖

我很確定這不是正確的表示法。我是否應該在超類級別創建關係並記下限制將在程式級別實現?

我認為您可以創建一個實體,它是和Orders之間的關係。將有子類和,它們分別是 和 的子類之間的關係。Products``Customers``Orders``FoodOrders``ShoeOrders``Food - GroceryStores``Shoes - ShoeStores

                                           ┌───────────┐
                                           │ Employees │
                                           └─────┬─────┘
                                                 │
                                                 │
     ┌──────────┐               ┌────────┐       │       ┌───────────┐
     │ Products ├─── contain ───┤ Orders ├─── deliver ───┤ Customers │
     └────┬─────┘               └────┬───┘               └─────┬─────┘
          │                          │                         │
          │                          │                         │
         isA                        isA                       isA
         │ │                        │ │                       │ │
    ┌────┘ └────┐             ┌─────┘ └─────┐            ┌────┘ └────┐
    │           │             │             │            │           │
┌───┴──┐    ┌───┴───┐         │             │    ┌───────┴───────┐   │
│ Food │    │ Shoes │         │             │    │ GroceryStores │   │
└───┬──┘    └───┬───┘         │             │    └───────┬───────┘   │
    │           │       ┌─────┴──────┐      │            │     ┌─────┴──────┐
    └───────────│───────┤ FoodOrders ├──────│────────────┘     │ ShoeStores │
                │       └────────────┘      │                  └─────┬──────┘
                │                     ┌─────┴──────┐                 │
                └─────────────────────┤ ShoeOrders ├─────────────────┘
                                      └────────────┘

引用自:https://dba.stackexchange.com/questions/126952