{"id":13483762,"url":"https://github.com/djezzzl/database_consistency","last_synced_at":"2025-04-09T02:07:35.634Z","repository":{"id":37484193,"uuid":"155371995","full_name":"djezzzl/database_consistency","owner":"djezzzl","description":"The tool to avoid various issues due to inconsistencies and inefficiencies between a database schema and application models.","archived":false,"fork":false,"pushed_at":"2024-10-09T19:19:53.000Z","size":643,"stargazers_count":1056,"open_issues_count":13,"forks_count":46,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-10-29T14:15:41.676Z","etag":null,"topics":["activerecord","consistency","database","optimization","performance","rails","ruby","ruby-on-rails","tool"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/djezzzl.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"open_collective":"database_consistency"}},"created_at":"2018-10-30T11:13:51.000Z","updated_at":"2024-10-29T06:26:40.000Z","dependencies_parsed_at":"2023-11-11T21:37:33.092Z","dependency_job_id":"cc4d2db6-1ff7-4fc1-bc94-90acfeb9c1bd","html_url":"https://github.com/djezzzl/database_consistency","commit_stats":{"total_commits":298,"total_committers":29,"mean_commits":"10.275862068965518","dds":"0.17449664429530198","last_synced_commit":"393db823d166fb704876c6365e84dff3e8519248"},"previous_names":[],"tags_count":108,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djezzzl%2Fdatabase_consistency","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djezzzl%2Fdatabase_consistency/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djezzzl%2Fdatabase_consistency/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djezzzl%2Fdatabase_consistency/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/djezzzl","download_url":"https://codeload.github.com/djezzzl/database_consistency/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247962414,"owners_count":21024860,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["activerecord","consistency","database","optimization","performance","rails","ruby","ruby-on-rails","tool"],"created_at":"2024-07-31T17:01:15.038Z","updated_at":"2025-04-09T02:07:35.611Z","avatar_url":"https://github.com/djezzzl.png","language":"Ruby","funding_links":["https://opencollective.com/database_consistency","https://opencollective.com/database_consistency/backer/0/website","https://opencollective.com/database_consistency/backer/1/website","https://opencollective.com/database_consistency/backer/2/website","https://opencollective.com/database_consistency/backer/3/website","https://opencollective.com/database_consistency/backer/4/website","https://opencollective.com/database_consistency/backer/5/website","https://opencollective.com/database_consistency/backer/6/website","https://opencollective.com/database_consistency/backer/7/website","https://opencollective.com/database_consistency/backer/8/website","https://opencollective.com/database_consistency/backer/9/website","https://opencollective.com/database_consistency/backer/10/website","https://opencollective.com/database_consistency/backer/11/website","https://opencollective.com/database_consistency/backer/12/website","https://opencollective.com/database_consistency/backer/13/website","https://opencollective.com/database_consistency/backer/14/website","https://opencollective.com/database_consistency/backer/15/website","https://opencollective.com/database_consistency/backer/16/website","https://opencollective.com/database_consistency/backer/17/website","https://opencollective.com/database_consistency/backer/18/website","https://opencollective.com/database_consistency/backer/19/website","https://opencollective.com/database_consistency/backer/20/website","https://opencollective.com/database_consistency/backer/21/website","https://opencollective.com/database_consistency/backer/22/website","https://opencollective.com/database_consistency/backer/23/website","https://opencollective.com/database_consistency/backer/24/website","https://opencollective.com/database_consistency/backer/25/website","https://opencollective.com/database_consistency/backer/26/website","https://opencollective.com/database_consistency/backer/27/website","https://opencollective.com/database_consistency/backer/28/website","https://opencollective.com/database_consistency/backer/29/website"],"categories":["Database Tools","Ruby","Awesome Ruby CLIs","Programming Languages","Gems"],"sub_categories":["Database","Database Integrity and Data Consistency"],"readme":"# DatabaseConsistency\n\n[![](https://badge.fury.io/rb/database_consistency.svg)](https://badge.fury.io/rb/database_consistency)\n[![](https://github.com/djezzzl/database_consistency/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/djezzzl/database_consistency/actions/workflows/tests.yml?query=event%3Aschedule)\n[![](https://github.com/djezzzl/database_consistency/actions/workflows/rubocop.yml/badge.svg?branch=master)](https://github.com/djezzzl/database_consistency/actions/workflows/rubocop.yml?query=event%3Aschedule)\n[![](https://opencollective.com/database_consistency/tiers/badge.svg)](https://opencollective.com/database_consistency#support)\n\nThe main goal of the project is to help you avoid various issues due to inconsistencies and inefficiencies between a database schema and application models.\n\n\u003e If the project helps you or your organization, I would be very grateful if you [contribute](https://github.com/djezzzl/database_consistency#contributing) or [donate](https://opencollective.com/database_consistency#support).  \n\u003e Your support is an incredible motivation and the biggest reward for my hard work.\n\nFor detailed information, please read the [wiki](https://github.com/djezzzl/database_consistency/wiki).\n\nCurrently, the tool can:\n- [find missing null constraints](https://github.com/djezzzl/database_consistency/wiki/columnpresencechecker)\n- [find missing length validations](https://github.com/djezzzl/database_consistency/wiki/lengthconstraintchecker)\n- [find missing presence validations](https://github.com/djezzzl/database_consistency/wiki/nullconstraintchecker)\n- [find missing uniqueness validations](https://github.com/djezzzl/database_consistency/wiki/uniqueindexchecker)\n- [find missing foreign keys for `BelongsTo` associations](https://github.com/djezzzl/database_consistency/wiki/foreignkeychecker)\n- [find missing unique indexes for uniqueness validation](https://github.com/djezzzl/database_consistency/wiki/missinguniqueindexchecker)\n- [find missing indexes for `HasOne` and `HasMany` associations](https://github.com/djezzzl/database_consistency/wiki/missingindexchecker)\n- [find primary keys with integer/serial type](https://github.com/djezzzl/database_consistency/wiki/primarykeytypechecker)\n- [find mismatching primary key types with their foreign keys](https://github.com/djezzzl/database_consistency/wiki/foreignkeytypechecker)\n- [find redundant non-unique indexes](https://github.com/djezzzl/database_consistency/wiki/redundantindexchecker)\n- [find redundant uniqueness constraints](https://github.com/djezzzl/database_consistency/wiki/redundantuniqueindexchecker)\n- [find mismatching enum types with their values](https://github.com/djezzzl/database_consistency/wiki/enumtypechecker)\n- [find mismatching foreign key cascades](https://github.com/djezzzl/database_consistency/wiki/foreignkeycascadechecker)\n- [find inconsistent values between enums in the database and ActiveRecord's enums/inclusion validations](https://github.com/djezzzl/database_consistency/wiki/enumvaluechecker)\n- [find redundant `case_sensitive: false` option for unique validations for case-insensitive types](https://github.com/djezzzl/database_consistency/wiki/casesensitiveuniquevalidationchecker)\n- [find missing null constraints on boolean fields](https://github.com/djezzzl/database_consistency/wiki/threestatebooleanchecker)\n- [find broken associations that refer undefined models](https://github.com/djezzzl/database_consistency/wiki/missingassociationclasschecker)\n- [find models that have missing tables](https://github.com/djezzzl/database_consistency/wiki/missingtablechecker)\n- [find models with UUID primary keys without specified ordering column](https://github.com/djezzzl/database_consistency/wiki/implicitorderingchecker)\n\nBesides that, the tool provides:\n- [auto-correction](https://github.com/djezzzl/database_consistency/wiki/auto-correction)\n- [flexible configuration](https://github.com/djezzzl/database_consistency/wiki/configuration)\n- [slow start with TODO files](https://github.com/djezzzl/database_consistency/wiki/generate-todo)\n- [support of customer checker](https://github.com/djezzzl/database_consistency/wiki/custom-checker)\n\nWe support the following databases: `SQLite3`, `PostgreSQL` and `MySQL`.  \nWe support [ActiveRecord](https://github.com/rails/rails/tree/master/activerecord) only at the moment.\nPlease upvote the request for other frameworks if you're interested.\n\nFollow me and stay tuned for the updates:\n- [LinkedIn](https://www.linkedin.com/in/evgeniydemin/)\n- [Medium](https://evgeniydemin.medium.com/)\n- [Twitter](https://twitter.com/EvgeniyDemin/)\n- [GitHub](https://github.com/djezzzl)\n\n## Usage\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem 'database_consistency', group: :development, require: false\n```\n\nAnd then execute:\n\n```bash\n$ bundle install\n```\n\n### Example\n\n```bash\n$ bundle exec database_consistency\nNullConstraintChecker fail User code column is required in the database but does not have a validator disallowing nil values\nNullConstraintChecker fail User company_id column is required in the database but do not have presence validator for association (company)\nLengthConstraintChecker fail Company note column has limit in the database but do not have length validator\nMissingUniqueIndexChecker fail User name+email model should have proper unique index in the database\nForeignKeyChecker fail User company should have foreign key in the database\nForeignKeyTypeChecker fail User company associated model key (id) with type (integer) mismatches key (company_id) with type (integer(8))\nMissingIndexChecker fail Company user associated model should have proper index in the database\nForeignKeyTypeChecker fail Company user associated model key (company_id) with type (integer(8)) mismatches key (id) with type (integer)\nMissingIndexChecker fail Country users associated model should have proper index in the database\nColumnPresenceChecker fail User phone column should be required in the database\nColumnPresenceChecker fail User name column is required but there is possible null value insert\nUniqueIndexChecker fail User index_users_on_name_and_slug index is unique in the database but do not have uniqueness validator\nRedundantUniqueIndexChecker fail User index_users_on_name_and_slug index uniqueness is redundant as (index_users_on_slug) covers it\nRedundantIndexChecker fail User index_users_on_phone index is redundant as (index_users_on_phone_and_slug) covers it\nColumnPresenceChecker fail User tmp column (tmp) is missing in table (users) but used for presence validation\nForeignKeyTypeChecker fail User something association (something) of class (User) relies on field (something_id) of table (users) but it is missing\nThreeStateBooleanChecker fail Company active boolean column should have NOT NULL constraint\nMissingAssociationClassChecker fail Company anything refers to undefined model \"Anything\"\nMissingTableChecker fail LegacyModel should have a table in the database\nImplicitOrderingChecker fail Secondary::User id implicit_order_column is recommended when using uuid column type for primary key\n```\n\n## Funding\n\n### Open Collective Backers\n\nYou're an individual who wants to support the project with a monthly donation. Your logo will be available on the Github page. [[Become a backer](https://opencollective.com/database_consistency#backer)]\n\n\u003ca href=\"https://opencollective.com/database_consistency/backer/0/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/0/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/1/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/1/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/2/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/2/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/3/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/3/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/4/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/4/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/5/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/5/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/6/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/6/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/7/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/7/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/8/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/8/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/9/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/9/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/10/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/10/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/11/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/11/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/12/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/12/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/13/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/13/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/14/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/14/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/15/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/15/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/16/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/16/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/17/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/17/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/18/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/18/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/19/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/19/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/20/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/20/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/21/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/21/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/22/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/22/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/23/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/23/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/24/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/24/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/25/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/25/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/26/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/26/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/27/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/27/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/28/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/28/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/backer/29/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/backer/29/avatar.svg\"\u003e\u003c/a\u003e\n\n### Open Collective Sponsors\n\nYou're an organization that wants to support the project with a monthly donation. Your logo will be available on the Github page. [[Become a sponsor](https://opencollective.com/database_consistency#sponsor)]\n\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/0/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/0/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/1/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/1/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/2/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/2/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/3/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/3/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/4/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/4/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/5/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/5/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/6/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/6/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/7/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/7/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/8/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/8/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/9/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/9/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/10/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/10/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/11/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/11/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/12/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/12/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/13/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/13/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/14/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/14/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/15/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/15/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/16/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/16/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/17/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/17/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/18/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/18/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/19/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/19/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/20/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/20/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/21/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/21/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/22/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/22/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/23/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/23/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/24/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/24/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/25/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/25/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/26/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/26/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/27/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/27/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/28/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/28/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/database_consistency/sponsor/29/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/database_consistency/sponsor/29/avatar.svg\"\u003e\u003c/a\u003e\n\n## Contributing\n\n[Bug reports](https://github.com/djezzzl/database_consistency/issues) and [pull requests](https://github.com/djezzzl/database_consistency/pulls) are welcome on GitHub.\nThis project is intended to be a safe, welcoming space for collaboration, and contributors are expected\nto adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.\n\n### Contributors\n\n\u003cimg src=\"https://opencollective.com/database_consistency/contributors.svg?width=890\u0026button=false\" /\u003e\n\n## Code of Conduct\n\nEveryone interacting in the *DatabaseConsistency* project’s codebases, issue trackers, chat rooms\nand mailing lists is expected to\nfollow the [code of conduct](CODE_OF_CONDUCT.md).\n\n## Changelog\n\n*DatabaseConsistency*'s changelog is available [here](CHANGELOG.md).\n\n## Copyright\n\nCopyright (c) Evgeniy Demin. See [LICENSE.txt](LICENSE.txt) for further details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjezzzl%2Fdatabase_consistency","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdjezzzl%2Fdatabase_consistency","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjezzzl%2Fdatabase_consistency/lists"}