I agree with you that using a link table is better. This was my original argument.
Yet often the need to sign tables (created_by) will suddenly cause a duplication of tables because lots of link tables have to be added and queries changed. This is what I meant by good case. Massimo On Nov 11, 12:05 pm, Thadeus Burgess <[email protected]> wrote: > WRong. cr2 is a really really bad design. > > Database 101, any many to many relationship must be defined through a link > table. > > Redesign CR2 like so... > > db.define_table('person',.... created_by('person')) > db.define_table('company',...created_by('company')) > > db.define_table('person_company', id_person('person'), > id_company('company')) > > If you want to knwo what company ap person belongs to, look it up in the > link table > > person = db.person.first() > link = db.person_company.id_person == person.id > company = db.company.id == link.id_company > > This is the "proper" way to design this type of relationship. > > I would opt more for a feature in web2py that did this in the background > than handled circular dependency magick. > > -- > Thadeus > > On Thu, Nov 11, 2010 at 11:32 AM, mdipierro <[email protected]> wrote: > > Ok. Your crm2jpg makes a good case. You proved me wrong. > > I will try add this by the week-end. > > > Massimo > > > On Nov 11, 11:24 am, Mirek Zvolský <[email protected]> wrote: > > > -> mdipierro > > > I have prepared 2 pictures, and in this time there is new post from > > > you about company/author. Interesting that my pictures are about the > > > same :-) > > > > Model of your CRM application application is here: > >http://zvolsky.alwaysdata.net/crm1.jpg > > > Such model can be implemented in web2py, but order of definitions is > > > important: auth_user, company, person > > > > But let's think, you want all people from person's table can register/ > > > login into your application. In such case you will follow web2py book, > > > chapter 8,http://web2py.com/book/default/chapter/08, Customizing Auth & > > Renaming > > > Auth Tables, > > > and you will receive following model: > >http://zvolsky.alwaysdata.net/crm2.jpg > > > > And using "reference..." field types, in both definition orders > > > (company,person or person,company) web2py will fail. > > > > As you say, I can use 'integer' type to avoid this problem, where it > > > is. But mixing 'reference..' and 'integer' for same goal would be > > > strange. So I can use 'integer' for all foreign keys in database. But > > > that means in other words, that the 'reference..' field type is for > > > nothing. > > > > What about a more difficult model ashttp:// > > zvolsky.alwaysdata.net/crm3.jpg > > > I'm sorry, this is not in english. However it is something about > > > organization of courses, lessons, we have some teachers and > > > partitipant here, some payments for whole course of for one lesson > > > only, and so on. > > > > Generated web2py code from OndrejZara's web designer is here: > >http://zvolsky.alwaysdata.net/jekus.py > > > > And of course this code will fail in web2py, because of there is no > > > possibility to find a proper order of table definitions. > > > Please, think about this. The change in web2py in this direction would > > > be great. > > > > Best regards, Mirek > >

