Composite Primary Key Design Notes ¶
Collating design considerations, options and decisions here to help get this feature moving.
Design Questions ¶
How do you specify multiple fields for the primary key? ¶
The "neatest" solution would be to allow primary_key=True
on multiple fields but this may be precluded by other design considerations.
How do you foreign key onto a table with a composite foreign key? ¶
The primary key is a set of the columns.
What do you use for .get(pk=foo) with a composite primary key? ¶
The primary key is a set of the columns.
There is mention of the comment framework overlapping with this.
How does Admin map a url to an object? ¶
Possible solutions (for a key with the value { val_foo, val_bar, val_baz }
:
/appname/modulename/val_foo,val_bar,val_baz/
How to deal with values containing commas? Should be able to be handled with some nice url escaping.
/appname/modulename/val_foo/val_bar/val_baz/
How to deal with identity between different orders of the same set? ¶
The columns of a key are a set, and have no implicit order. This means the key { val_foo, val_bar, val_baz }
is identical to { val_baz, val_foo, val_bar }
and so on for all permutations. How should URLs be parsed to reflect this identity?
Affected Areas ¶
Models ¶
Need a way of defining the primary key.
Generation of the create table SQL.
A solution for foreign keying onto a table with a composite primary key.
Many to many relationships should use composite primary keys if they are unique . . .
Queries ¶
Model.objects.get(pk=foo) needs to be supported.
Solution: the primary key is a set of the column values.
Forms ¶
Admin ¶
Expect there is a large amount of work in here making sure all the model inspection and form generation works.
URL to object mapping.
Serialization ¶
Code needs to be looked at further but all the foreign keying is likely to need attention.
Relevant Discussions ¶
- Jul 2008 http://groups.google.com/group/django-developers/browse_thread/thread/4b2370a0652d9135/2344ca721a4213fd (David Cramer initial thoughts)
- Sep 2008 http://groups.google.com/group/django-developers/browse_thread/thread/32f861c8bd5366a5/22732dc88e644f77 (David Cramer and Malcolm Tredinnick pk talk)
- Nov 2008 http://groups.google.com/group/django-developers/browse_thread/thread/eac7c296c3797f5a/d94cd7cdd0d69b18 (David Cramer proposal)