# Active Record Pattern


_From [**Wikipedia**](wikipedia.org), the free encyclopedia_

In [computer science](http://en.wikipedia.org/wiki/Computer_science "Computer science"), the **active record pattern** is a [design pattern](http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 "Design pattern (computer science)") frequently found in software that stores its data in [relational databases](http://en.wikipedia.org/wiki/Relational_database "Relational database"). It was named by [Martin Fowler](http://en.wikipedia.org/wiki/Martin_Fowler "Martin Fowler") in his book _Patterns of Enterprise Application Architecture_.

Active record is an approach to accessing data in a [database](http://en.wikipedia.org/wiki/Database "Database"). A [database table](http://en.wikipedia.org/wiki/Database_table "Database table") or [view](http://en.wikipedia.org/wiki/View_%28database%29 "View (database)") is wrapped into a [class](http://en.wikipedia.org/wiki/Class_%28computer_science%29 "Class (computer science)"), thus an [object](http://en.wikipedia.org/wiki/Object_%28computer_science%29 "Object (computer science)") instance is tied to a single row in the table. After creation of an object, a new row is added to the table upon save. Any object loaded gets its information from the database; when an object is updated, the corresponding row in the table is also updated. The [wrapper class](http://en.wikipedia.org/wiki/Wrapper_class "Wrapper class") implements [accessor](http://en.wikipedia.org/wiki/Accessor "Accessor") [methods](http://en.wikipedia.org/wiki/Methods "Methods") or properties for each column in the table or view.

This pattern is commonly used by object persistence tools, and in [object-relational mapping](http://en.wikipedia.org/wiki/Object-relational_mapping "Object-relational mapping"). Typically [foreign key](http://en.wikipedia.org/wiki/Foreign_key "Foreign key") relationships will be exposed as an object instance of the appropriate type via a property.

Implementations of Active Record can be found in various [frameworks](http://en.wikipedia.org/wiki/Framework "Framework") for many programming environments. For example, if in a database there is a table `parts` with columns `name` (string type) and `price` (number type), and the Active Record pattern is implemented in the class `Part`, the following pseudo-code:

part = new Part()
part.name = "Sample part"
part.price = 123.45
part.save()

will create a new row in the `parts` table with the given values, and is roughly equivalent to the [SQL](http://en.wikipedia.org/wiki/SQL "SQL") command

INSERT INTO parts (name, price) VALUES('Sample part', 123.45);

Conversely, the class can be used to query the database:

b = Part.find\_first\_part("name", "gearbox")

This will create a new `Part` object based on the first matching row from the `parts` table whose `name` column has the value "gearbox". The SQL command used would be

SELECT \* FROM parts WHERE name = 'gearbox' LIMIT 1;

Để đó, chưa dịch :(

