0

我一直在将 STI 用于名为 Journey 的表。人们将发布旅程请求/报价,因此鉴别器将是:驾驶员或乘客,这意味着将有愿意开车和搭乘其他乘客的人或只是搭便车的人(乘客)发布旅程。所以这两个会共享大部分属性(例如出发日期、来源、目的地等),但是由于发帖用户的类型,会有一些名称冲突。

例如,如果我是一名乘客,我可以指定我想和我的朋友一起旅行(因此,PassengerCount = 2,即我们寻找至少有 2 个可用座位的司机)。或者我可能会注意到,我想随身携带一些行李(因此 HaveLuggage = true,即我正在寻找可以带我行李的游乐设施)

另一方面,如果我是司机,我应该填写一个表格,我可以在其中指定可用座位的数量 (AvailableSeats),并且我可能会注意到我不能运输行李 (TakesLuggage=false)。

如您所见,PassengerCount - AvailableSeats 和 HaveLuggage - TakesLuggage 列是相同的,只是它们的名称与海报的角度不同。

所以问题是,为了尽量减少混淆,我应该遵循什么命名约定?另外,拥有一张这样的桌子(STI)是个好主意吗?如果没有,您会推荐什么替代方案?

4

1 回答 1

0

不确定您是否需要过多担心命名约定...您已经获得了可区分的属性(类型)。可以在数据输出上添加标签,以根据您的喜好进行区分。例子:

Journey
   Type (integer) -- 1 = provider, 2 = consumer
   Passengers (integer)
   Luggage (bit / bool) -- 1 = yes, 0 = no

至于命名约定:

SELECT "Driver", passengers as "Avaliable Seats", luggage as "Takes Luggage" WHERE type=1
UNION
SELECT "Passenger", passengers as "Passenger Count", luggage as "Have Luggage" WHERE type=2

或者您可以在 SELECT 本身中使用控制语句(IF/CASE/etc)。

于 2013-02-21T16:19:47.807 回答