-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Strong relations with referential integrity #2331
Comments
This comment has been minimized.
This comment has been minimized.
Just to quote from the other issue:
This may be a good opportunity to revisit this soon as it’ll help streamline the use of LoopBack 4 and promote an increase in overall efficiency of the SQL queries. |
This issue has been marked stale because it has not seen activity within six months. If you believe this to be in error, please contact one of the code owners, listed in the |
This issue has been marked stale because it has not seen activity within six months. If you believe this to be in error, please contact one of the code owners, listed in the |
Essentially, we see two levels of relations:
IMO, referential integrity must be guaranteed at repository level (or lower). For example, when a test helper invokes repository APIs to seed the database with sample data, then we want the referential integrity to be preserved. If we implemented referential integrity at controller level, then consumers of Repository API would be bypassing these checks and would be able to created corrupted data.
Implementation wise, it's important to implement referential integrity in way that does not create any race conditions. For example, a naive implementation calling
findById
on the source model before creating a new instance of the target model creates a race condition - if another request deletes the source model instance afterfindById
received database response but before create command is set, then we end up with corrupted data.With SQL databases, referential integrity is typically implemented by defining FOREIGN KEY constraints. In the context of LB4, this means that
lb4 migrate
must create such constraints based on the relations configured by the app.With NoSQL databases, users should use different relation types than
hasMany
, for examplereferencesMany
orembedsMany
.The text was updated successfully, but these errors were encountered: