[DBD-SQLite] Removing the on-by-default referential integrity.
Darren Duncan
darren at darrenduncan.net
Tue Nov 3 00:52:41 GMT 2009
Adam Kennedy wrote:
> For the first production release of DBD::SQLite with foreign keys,
> it's starting to make me nervous that we will enable it by default.
>
> As things currently stand, nobody that is using SQLite has ever seen
> this feature before. They haven't had the chance to work with it at
> all before we shove it down their throats.
>
> I think I'd like to follow SQLite itself for now and default it off.
>
> Thoughts?
Doing what you say would follow the policy of SQLite itself. I believe they are
also strongly considering turning it on by default within the near future.
For DBD::SQLite, I have a few thoughts.
1. DBD::SQLite serves a smaller ecosystem than SQLite itself, and I think it is
safer for us to sooner push through changes like having foreign keys enforcement
enabled by default.
2. Having foreign keys enabled by default would only affect people that are
explicitly writing foreign key constraints into their SQL. So in general, why
would people write those constraints but not expect them to be enforced? Maybe
for documentation purposes, but in that case presumably they also had other
means to keep their data clean, and if enforcing foreign keys becomes active
that should not cause an immediate break if their replacement practices were
doing their job.
3. I would support foreign key enforcement being turned off by default only if
we make it very clear that the disabled-by-default state is meant only to be
temporary and transitional, and that DBD::SQLite will have the feature enabled
by default within a certain time frame, such as within 2 months, or alternately:
Make the public release 1.27 have foreign keys disabled by default, and have
the very next public release (and all developer releases) have it enabled by
default; they only exception is if another public release has to go out very
soon to fix a critical bug, in which case it goes out with say a disabled 1.28,
and then the same policy stands otherwise.
So essentially, just 1 disabled-by-default stable release is fine, so people who
expect to be able to write foreign key constraints that aren't enforced can get
the bug fixes we have to date, and aren't forced to have one to get the other;
however, enabled-by-default should be the default thereafter.
I see an advantage of disabled-by-default if we want to have a test suite for
the feature added, and you want to ship a stable 1.27 right now.
-- Darren Duncan
More information about the DBD-SQLite
mailing list