【问题标题】:Database, table inheritance?数据库、表继承?
【发布时间】:2015-03-04 17:51:44
【问题描述】:

这是关于数据库结构的。 (继承)

假设您有 PlaceRestaurantCafe 是地方的两种子类型。

  1. 您可以创建一个Place 表来保存子类型的公共信息。
    并创建一个外键来连接到RetaurantCafe 实例。

  1. 您可以复制RestaurantCafe 中的内容

我来自 Django 背景,许多人似乎更喜欢 #2 而不是 #1。

是否有一个令人信服的场景,您应该选择一个而不是另一个?

我认为我需要 #1 的一种情况是,当您要对所有 Places 进行集体排序时。 (我们可以为此使用#2 吗?)

【问题讨论】:

  • 您使用的是哪个 DBMS? Postgres 原生支持表继承。
  • 我正在使用 postgres,呵呵。

标签: database schema


【解决方案1】:

我想我会选择 #2,因为您不必考虑关系和外键,而且模型本身是完整的,因此您可以复制数据库并将其用于其他用途。 此外,您只需要查询一个表而不是两个。

如果需要对 Restaurant 和 Cafe 进行排序,可以使用 SQL UNION 运算符。 假设您有这两个简单的表:

restaurant
id | name         | likes
-------------------------
1  | Steakhouse   | 5
2  | Italian Food | 3

cafe
id | name      | likes
--------------------------
1  | Starbucks | 0

您可以像这样使用 UNION 运算符查询它们:

SELECT * FROM cafe
UNION
SELECT * FROM restaurant
ORDER BY likes DESC

这将返回按喜欢订购的咖啡馆和餐馆的列表,就好像它们来自同一张桌子一样。

【讨论】:

  • 对不起,我不明白你的最后一句话。您如何使用 sql 中的 #2 对餐厅和咖啡馆进行点赞数排序?
  • 对不起,我想说 UNION 不是 JOIN。我将编辑我的答案
猜你喜欢
  • 1970-01-01
  • 2010-09-05
  • 2014-04-30
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
相关资源
最近更新 更多