2013-02-21 64 views
0

我一直在使用STI作为名为Journey的表。人们会张贴旅程要求/优惠,因此鉴别人可以是:司机或乘客,这意味着会有愿意开车和乘坐其他乘客的人或只是搭便车(乘客)的人张贴旅程。因此,这两个人将共享大多数属性(例如离开日期,来源,目的地等),但由于发布用户的类型,会有一些名称冲突。例如,如果我是乘客,我可以指定我想和我的朋友一起旅行(因此PassengerCount = 2,即我们寻找有至少2个可用座位的司机)。或者我可能会注意到,我想带上一些行李(因此HaveLgage = true,即我正在寻找可以带我的行李的游乐设施)单表继承名称冲突

另一方面,如果我是司机,我应该填写一张表格,我可以指定可用座位的数量(AvailableSeats),我可能会注意到我无法运送行李(TakesLgage = false)。

正如您所看到的,PassengerCount - AvailableSeats和HaveLgage - TakesLgage列是相同的,只是他们的名字不同于海报的角度。

所以问题是,我应该遵循什么命名约定以最大限度地减少混淆?另外,如果有这样一张表(STI),这是一个好主意,如果不是,你会推荐什么替代方案?

回答

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 /等)。