单表继承名称冲突

时间:2013-02-21 16:02:28

标签: sql database-design

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

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

另一方面,如果我是司机,我应填写一份表格,我可以指定可用座位数(AvailableSeats),我可能会注意到我不能运送行李(TakesLuggage = false)。

正如您所看到的,PassengerCount - AvailableSeats和HaveLuggage - TakesLuggage列是相同的,只有他们的名字与海报的观点不同。

所以问题是,为了尽量减少混淆,我应遵循哪种命名惯例?另外,如果有这样一个表(STI)是个好主意,如果没有,你会推荐哪种替代方案?

1 个答案:

答案 0 :(得分: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)。