Streamlining Database Migration: The Secrets to Effortlessly Moving Your Data Across Platforms

Data migration is an essential process for businesses to keep their systems up to date, but it can be a complex and challenging process. Here's how to do it more easily.

AWS Admin
Amazon Employee
Published May 25, 2023
Last Modified Jun 21, 2024
In today's rapidly evolving technological landscape, data migration has become an essential process for businesses striving to keep their systems up-to-date. With the ever-increasing volume and complexity of data, it is crucial for organizations, especially those relying on relational databases, to seamlessly transfer data from one system to another. However, data migration is not without its challenges, requiring meticulous planning and execution to mitigate potential issues effectively.
For starters, maintaining integrity is crucial in data migration, involving creating database constraints and using indexes correctly. Focusing solely on data migration without considering these critical factors can lead to severe issues, such as data inconsistencies and performance problems. This article explores how to add constraints and indexes, and the importance of DMS Schema Conversion. By following these steps, businesses can take steps towards successful relational database migration while maintaining data accuracy and performance.


Database constraints are rules that are enforced on the data stored within a database table to maintain its integrity. These constraints ensure that the stored data aligns with specific criteria and conditions, such as maintaining uniqueness, adhering to proper data types, and preserving relationships with other tables. By implementing these constraints, erroneous or invalid data is effectively prevented, ensuring the overall reliability, completeness, and validity of the database.
Constraints can differ slightly among various database engines, but some of the most common types of database constraints across databases like MySQL, Oracle, PostgreSQL, MS SQLServer etc. include:
  • Primary key constraint: Ensures that each record in a table has a unique identifier, used to uniquely identify each record in a table
  • Foreign key constraint: Defines a relationship between two tables, ensuring that the values in one table's column match the values in another table's column. This is also called referential integrity.
  • Unique constraint: Ensures that the values in a particular column or set of columns are unique.
  • Not null constraint: Ensures that a particular column cannot have a null value.
  • Check constraint: Defines a condition that values in a column must meet to be considered valid.
  • Default constraint: Specifies a default value for a column when a new record is inserted and the value for that column is not explicitly specified.
Here's a quick guide on how to add database constraints. The process of checking and creating constraints can differ slightly among various database engines, but it generally looks like this:
  • Identify missing constraints: Review the database schema and data to identify any missing constraints or tables that need to be added.
  • Add primary keys: To add a primary key, identify the column(s) that should be used as the primary key and then use the ALTER TABLE statement to add the PRIMARY KEY constraint.
  • Add foreign key: Create a new table that will be used as the reference table, then use the FOREIGN KEY constraint to link the reference table to the appropriate columns in the main table. Do ensure all values in the referencing column of main table are present in referenced column of reference table.
  • Add other constraints: There are several other constraints that should be added to ensure data accuracy and consistency, including UNIQUE constraints, CHECK constraints, DEFAULT constraint, and NOT NULL constraints. To add these constraints, use the appropriate ALTER TABLE statements.
  • Test and validate: Once all the constraints have been added, it's essential to test and validate the database to ensure that all the data is correct and that the constraints are working correctly.


A database index is a powerful tool that can dramatically improve the performance of data retrieval operations on a database table by quickly locating specific data based on the values in one or more columns. By creating and selecting indexes carefully, you can make your database queries more efficient and responsive. In the context of database migration, that means considering the existing indexes in the source database and ensuring their proper implementation in the target database. This step is crucial to maintain the performance enhancements achieved through indexes during the data retrieval operations in the new environment.
For example, if you have a table with 1 million rows and you create an index on the column you're querying, the same query that took several seconds without an index could take only a fraction of a second with an index.
Without an indexSlow, especially on large tables as database scans the entire table to find matches
With an indexFaster, as the database can use that index to quickly find the rows that match your query
Did you know that a primary key is a special type of index in a database? It uniquely identifies each row in a table and helps the database quickly find the right piece of information you're looking for based on that identifier.
After a data migration, it is important to ensure that primary keys (PKs) and indexes are added to maintain performance. To analyze the new database for usage patterns to add indexes, you can follow these steps:
  • Identify the most frequently accessed tables in the new database. This can be done by reviewing database logs or monitoring user activity.
  • Identify the most frequently executed queries against these tables.
  • Review the indexes that were present in the original database and compare them to the queries that are being executed in the new database. If there are any queries that are not being optimized by the current indexes, consider adding additional indexes to improve performance.
  • Keep in mind that adding too many indexes can also negatively impact performance, so it is important to strike a balance between having enough indexes to optimize queries and not having too many indexes that can slow down the database. This is because index management is also an overhead for database engines.
  • After adding new indexes, evaluating the database's performance is essential to ensure the desired impact and effectiveness of the changes. If performance is not improving, consider revising the index strategy or consulting with a database expert to identify other potential performance issues.
After migration, it becomes particularly important to monitor the database's performance, because the new environment may have different characteristics or workload patterns compared to the previous one. This necessitates thorough performance monitoring to ensure that the added indexes are effectively improving query execution and response times. By closely tracking performance metrics, any issues that arise can be promptly addressed, including the need to revise the index strategy or seek guidance from a database expert. In cases where the database is hosted as a managed service on AWS, reaching out to AWS Premium Support can provide valuable assistance in optimizing performance post-migration.

DMS Schema Conversion

Database objects such as indexes and constraints are examples of structures that store and organize data in a database. There are various other database objects like views, stored procedures, and triggers that may also need to be migrated. It can be challenging to manually analyze and migrate all of these database objects. To simplify the process, AWS DMS Schema Conversion can be used. DMS Schema Conversion automates the conversion of database schemas and code objects to a format compatible with the target database, allowing for easier and more efficient migration. This flexibility enables not only homogeneous migrations but also heterogeneous migrations. Homogeneous migration refers to moving data and applications between similar database systems. For example, migrating data from one Oracle database to another Oracle database would be considered a homogeneous migration. Heterogeneous migration, by contrast, involves transferring data and applications between different database systems. For example, migrating data from an Oracle database to a Microsoft SQL Server database would be classified as a heterogeneous migration.
To convert your database schema using AWS DMS Schema Conversion, follow these steps:
  1. Set up transformation rules: Before converting your database, it's essential to set up transformation rules that will change the names of your database objects during conversion. This will ensure that the converted objects are named correctly and consistently in the target database.
  2. Create a migration assessment report: To estimate the complexity of the migration, create a migration assessment report. This report provides crucial details about the schema elements that DMS Schema Conversion can't convert automatically. This information is valuable in planning for any necessary manual conversions.
  3. Converting your source database objects: Using DMS Schema Conversion, convert your source database objects. The tool will create a local version of the converted database objects, which you can access in your migration project.
  4. Saving converted code to SQL files: After conversion, save the converted code to SQL files. This allows you to review, edit, or address any conversion action items that need to be taken. Alternatively, you can apply the converted code directly to your target database.
Using AWS DMS Schema Conversion can help in reducing the manual efforts required for creating necessary database objects like indexes, constraints, functions, views, and more. This is achieved through the automation of the creation process, which in turn saves valuable time and resources that can be better used for more critical tasks during the migration process.


Database migration presents its challenges, and ensuring the integrity and performance of the data is of paramount importance. Constraints play a vital role in maintaining data integrity, while indexes enhance the efficiency of data retrieval operations. Post-migration, it is crucial to verify the presence and effectiveness of constraints and indexes to uphold both integrity and performance. Throughout this post, we have gained insights into the process of setting up constraints and indexes, understanding when and how to implement them. By adhering to these best practices, businesses can navigate the complexities of database migration while safeguarding data integrity and optimizing performance.

Any opinions in this post are those of the individual author and may not reflect the opinions of AWS.