# Creating Tables

## Content

## What Is a Table

A Table is the core data container in DataManager.
It is responsible for:

* Storing data
* Managing schema
* Handling data synchronization
* Maintaining relationships with other tables
* Serving as the host of Views

A View defines how data is presented.
A Table defines how data is stored and managed.

## Table Types

DataManager supports two types of tables:

### Memory Table

A memory table stores data locally in the client.

* Data is provided directly as JSON, CSV, or XML.
* All operations occur in memory.
* No server communication is required.

This type is suitable for:

* Static datasets
* Client-side applications
* Offline scenarios
* Prototyping

### Remote Table

A remote table retrieves and synchronizes data with a server.

* Data is read from a remote endpoint.
* Changes can be synchronized automatically or in batch.
* Column definitions can also be managed remotely.

This type is suitable for:

* Enterprise applications
* CRUD systems
* Centralized data storage
* Multi-user environments

## Table Creation API

A table is created using:

```javascript
dataManager.addTable(name, dataSourceOption);
```

The `dataSourceOption` determines:

* Whether the table is memory-based or remote-based
* Whether synchronization is enabled
* How schema is defined

## Basic Data Flow

```auto
Memory Data or Remote Source
          ↓
        Table
          ↓
        View
          ↓
      Component
```

The Table layer is independent from the UI layer.

## Next Steps

* [Add Memory Table](/spreadjs/docs/features/data-manager/creating-tables/add-memory-table)
* [Add Remote Table](/spreadjs/docs/features/data-manager/creating-tables/add-remote-table)