Hello everyone,

I'm working on the system with 2 very big tables (billion of records) that 
is having ManyToOne relationship with other. The size of these tables are 
nearly the same.

Lets say I have table child and parent. Each of the parent can have 
multiple child (children) records.

The child table is using `parent = models.ForeignKey(Parent, ....)` 
declaration.

The idea is to change the relationship into "a parent will only have one 
children, with all the legacy records existing."

>From database constraint level, I can do it pretty easy by using 
conditional check/uniq/ constraint. Even the existing indices (django 
indices) can already being used. I also create a new child_id (null for 
legacy record, uniq for new record) column for parent table, to have easier 
control on those constraints condition. This I believed it would be helpful 
for the django part below.

The django part is what I would love look for opinions.
 - I can keep the models as it is and enforce some convention 
rule/supporting method to have usage of one-to-one relationship. This seem 
to be ugly and we tent to live with the legacy records for quite some times.

- Extend the foreignkey class or its relatives/parent class, so that it can 
"behave" as close as OneToOne (for new records) and ManyToOne (for old 
records).

I digged a bit into the source code, I think my jackpot would be looking 
into the Related classes and Descriptor classes. But im pretty far from 
finish getting whole picture.

My wet dream would be something:

a_parent.child might got exception if it is legacy record (or pick the 
newest child, this part not that hard)
a_parent.children still yield list of child (easier on refactoring with 
small steps)
child1.parent = _id1; child2.parent = _id1 still work (for legacy, 
parent.child_id is Null)
parent.child = child3; parent.save(); child4.parent = parent not work (new, 
parent.child_id is not Null, probably depended on my db constraints)

Really appreciate if anyone have any opinions or hint/direction around this 
topic. 

Thanks bunch.

Andy (Dung), Hoang



-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/1e5a4207-7f93-4f82-ac01-c86b97add597n%40googlegroups.com.

Reply via email to