It's hard to believe that I was talking about this in 2013 
<https://groups.google.com/g/web2py/c/Vh-J2AQ-mBE/m/xOMh3mm7ovEJ>, but here 
it is again!

I'm wondering if you can directly implement the Table-per-type or 
Shared-primary-key method of inheritance in the DAL?

[image: subclass-gradstu-scheme.gif]

The standard DAL inheritance method (including a table as a field) is a 
Table-per-concrete approach that has pros and cons. In particular for me, 
it is harder to deal with the common stuff (the stuff in the superclass) 
with the standard DAL method.  In many cases I never need to refer to the 
subclass specifics.

The best I have been able to do is something like the below. There is a lot 
of common stuff in the duration table (and, btw, the duration can be 
overridden and isn't necessarily the difference of the start and stop 
values in the subclasses). Depending on how the time is tracked, there are 
different algorithms used to compute a duration, for  example subtracting 
two datetimes or subtracting two floats (representing hours).

db.define_table(
    'duration',
    # Common stuff
    Field('duration','decimal(10,2)',notnull=True),
)

db.define_table(
    'datetime_duration',
    Field('superclass','reference duration',unique=True,notnull=True),
    Field('start','datetime',notnull=True),
    Field('stop','datetime',notnull=True),
)

db.define_table(
    'hour_duration',
    Field('superclass','reference duration',unique=True,notnull=True),
    Field('start','decimal(10,2)',notnull=True),
    Field('stop','decimal(10,2)',notnull=True),
)

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/web2py/08ce05ed-8ce8-4877-9452-0fded7d07f1en%40googlegroups.com.

Reply via email to