多个可空外键与多个资源表

Multiple nullable foreign key vs multiple resource tables

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

首先是拥有一个 Media table,它具有指向 Company 和 属性

的可为空的外键

第二个是对于 Company 和 属性 我们将有 CompanyMedia 和 属性Media

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

编辑:

建议解决方案 2 应该被杀死:)。

第二种方法是不允许恕我直言。 media_urlmedia_type 属性在数据库中必须是唯一的。否则,您可能会遇到重复和同步问题。

型号 2 的问题示例:

  • 一个媒体被link发送到公司 1。它的类型是 "video"。
  • 相同的媒体(即 URL)被 linked 为 属性 1。它的类型是 "blog"。
  • 如果您想要所有媒体及其类型的列表,现在会发生什么?你会选择哪一个?
  • 而且你必须查询 2 tables,这是低效的。

我在这里看到 4 table。公司、属性、媒体和媒体类型。媒体类型也应该有它自己的 table,以避免重复。

因此:

Company
    idCompany
    CompanyName

Property
    idProperty
    PropertyName

Media
    idMedia
    MediaURL
    idMediaType, FK to MediaType

MediaType
    idMediaType
    Type

和link tables:

Property_has_Media
    idProperty
    idMedia

Company_has_Media
    idCompany
    idMedia

型号:

如果如果 一种媒体永远不会link既被公司又被属性,那么我建议这种结构。从你的问题我是这么理解的。从概念上讲,媒体不会在公司和 属性 之间定义 link,因此有 2 个单独的 link table 更有意义。它还将避免整个查询中的 "IS NOT NULL"。