【发布时间】:2020-03-10 18:12:08
【问题描述】:
我有一个非常简单的 mediaTypes 表,其中包含以下列:
id string
name string
每个 mediaType 记录可以有许多“位置”,可以很容易地设计如下:
展示位置
id string
mediaTypeId string (links to mediaTypes.id)
name string
detail_col_1
detail_col_2
...etc
但是,根据媒体类型,一个展示位置可以包含不同的细节,所以如果我以这种方式设计架构,我最终可能会得到很多可为空的列。
为了解决这个问题,我可以有一个 aPlacements 表和一个 bPlacements 表来匹配每种不同的媒体类型。
展示位置
id string
mediaTypeId string (links to mediaTypes.id)
name string
placement_details_relevant_to_media_type_col_1
placement_details_relevant_to_media_type_col_2
bPlacements
id string
mediaTypeId string (links to mediaTypes.id)
name string
placement_details_relevant_to_media_type_col_1
placement_details_relevant_to_media_type_col_2
这样做的缺点是我将如何通过 id 找到一个展示位置,因为我必须在所有表中进行查询:
SELECT * FROM aPlacements WHERE id = '1234'
UNION ALL
SELECT * FROM bPlacements WHERE id = '1234'
etc
整个设计感觉有点设计味道。有关如何清理此架构的任何建议?
【问题讨论】:
-
这是一个常见问题解答--DB/SQL 子类型化/继承/多态性。在考虑发布之前,请始终使用谷歌搜索您的错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有或没有您的特定字符串/名称和站点:stackoverflow.com 和标签,并阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。
标签: database-design relational-database rdbms