首页 > 解决方案 > 多个可为空的外键与多个资源表

问题描述

我们正在设计一个系统,其中我们有两种类型的实体公司和财产。Property 和 Company 都有自己的媒体资源(视频、照片),因此我们正在讨论在数据库级别处理此问题的两种方法。

首先是拥有一个 Media 表,该表对 Company 和 Property 都具有可为空的外键

在此处输入图像描述

第二个是对于 Company 和 Property 我们将有 CompanyMedia 和 PropertyMedia

在此处输入图像描述

这些方法中哪一种更有意义?

编辑:

应该因为提出解决方案 No2 而被杀:)。

标签: databasedatabase-designforeign-keysrelational-database

解决方案


第二种方法是禁止恕我直言。media_url和media_type属性在数据库必须是唯一的。否则,您将面临重复和同步问题的风险。

型号 2 的问题示例:

  • 一种媒体链接到公司 1。它的类型是“视频”。
  • 相同的媒体(即 URL)链接到属性 1。它的类型是“博客”。
  • 如果您想要所有媒体及其类型的列表,现在会发生什么?你会拿哪一个?
  • 而且您必须查询 2 个效率低下的表。

我在这里看到 4 张桌子。公司、财产、媒体和媒体类型。媒体类型也应该有它自己的表,以避免重复。

因此:

Company
    idCompany
    CompanyName

Property
    idProperty
    PropertyName

Media
    idMedia
    MediaURL
    idMediaType, FK to MediaType

MediaType
    idMediaType
    Type

和链接表:

Property_has_Media
    idProperty
    idMedia

Company_has_Media
    idCompany
    idMedia

模型:

在此处输入图像描述

如果一种媒体从不与公司和财产联系起来,我建议采用这种结构。从你的问题来看,这是我的理解。从概念上讲,媒体没有定义公司和财产之间的链接,因此拥有 2 个单独的链接表更有意义。它还将避免在您的查询中出现“IS NOT NULL”。


推荐阅读