diff --git a/about/best-practices.md b/about/best-practices.md index 3a7df38b9..63de587ea 100644 --- a/about/best-practices.md +++ b/about/best-practices.md @@ -100,7 +100,7 @@ For processing at runtime CDS models are compiled into a *machine-readable* plai ![cdl-csn.drawio](assets/cdl-csn.drawio.svg) -See also *[On the Nature of Models](/cds/odels)* in the CDS reference docs. {.learn-more} +See also *[On the Nature of Models](/cds/models)* in the CDS reference docs. {.learn-more} @@ -399,7 +399,7 @@ entity ListOfBooks as projection on underlying.Books { } ``` -We use [CDS's *Conceptual Query Language (CQL)*](/cds/ql) to write queries in a human-readable way. For reasons of familarity, CQL is designed as a derivate of SQL, but used in CAP independent of SQL and databases. For example to derive new types as projections on others, or sending OData or GraphQL queries to remote services. +We use [CDS's *Conceptual Query Language (CQL)*](/cds/cql) to write queries in a human-readable way. For reasons of familiarity, CQL is designed as a derivate of SQL, but used in CAP independent of SQL and databases. For example to derive new types as projections on others, or sending OData or GraphQL queries to remote services. Here's a rough comparison of [CQL] with [GraphQL], [OData], and [SQL]: @@ -424,7 +424,7 @@ As apparent from this comparison, we can regard CQL as a superset of the other q ### Queries at Runtime -CAP also uses queries at runtime: an OData or GraphQL request is essentially a query which arrives at a service interface. Respective protocol adapter translate these into *machine-readable* runtime representations of CAP queries (→ see [*Core Query Notation, CQN*](/cds/qn)), which are then forwarded to and processed by target services. Here's an example, including CQL over http: +CAP also uses queries at runtime: an OData or GraphQL request is essentially a query which arrives at a service interface. Respective protocol adapter translate these into *machine-readable* runtime representations of CAP queries (→ see [*Core Query Notation, CQN*](/cds/cqn)), which are then forwarded to and processed by target services. Here's an example, including CQL over http: ::: code-group @@ -583,12 +583,12 @@ CAP can be combined with event sourcing patterns, that is, by tracking events in #### CAP supports SQL -CDS borrows reflexive view building from SQL to declare derived models and APIs as projections/transformation of underlying models, such as domain models. [CQL](/cds/ql) is based on SQL DML to allow direct mapping to SQL databases. However, it extends SQL with [Associations](/cds/dl#associations), [Path Expressions](/cds/ql#path-expressions), and [Nested Projections](/cds/ql#nested-expands) to overcome the need to deal with JOINs. Instead, these extensions allow working with data in a structured document-oriented way. {.indent} +CDS borrows reflexive view building from SQL to declare derived models and APIs as projections/transformation of underlying models, such as domain models. [CQL](/cds/cql) is based on SQL DML to allow direct mapping to SQL databases. However, it extends SQL with [Associations](/cds/dl#associations), [Path Expressions](/cds/cql#path-expressions), and [Nested Projections](/cds/cql#nested-expands) to overcome the need to deal with JOINs. Instead, these extensions allow working with data in a structured document-oriented way. {.indent} #### CAP supports NoSQL -The previously mentioned extensions in [CQL](/cds/ql) feature the modeling of nested document structures as well as view building and querying using navigation instead of cross products, joins, and unions. This actually brings CDS close to the concepts of NoSQL databases, with the data models playing the role of schemas for validation. Although CAP currently doesn't provide out-of-the-box support for concrete NoSQL databases, it's easy to do so in project-specific solutions. {.indent} +The previously mentioned extensions in [CQL](/cds/cql) feature the modeling of nested document structures as well as view building and querying using navigation instead of cross products, joins, and unions. This actually brings CDS close to the concepts of NoSQL databases, with the data models playing the role of schemas for validation. Although CAP currently doesn't provide out-of-the-box support for concrete NoSQL databases, it's easy to do so in project-specific solutions. {.indent} #### CAP and the Relational Model @@ -615,7 +615,7 @@ In addition, CAP features _queries as first-class and higher-order objects_, all #### CAP != Object-Relational Mapping -CAP and CDS aren't _Object-Relational Mapping_ (ORM). Instead, **we prefer querying** using [CQL](/cds/ql) to read and write data, which allows declaratively expressing which data you're interested in by means of projection and selection instead of loading object graphs automatically. Result sets are pure REST data, that are snapshot data representations. One reason for this is the assumption that the lifetime of object cache entries (which are essential for ORMs to perform) is frequently in the range of milliseconds for _REST_ services. {.indent} +CAP and CDS aren't _Object-Relational Mapping_ (ORM). Instead, **we prefer querying** using [CQL](/cds/cql) to read and write data, which allows declaratively expressing which data you're interested in by means of projection and selection instead of loading object graphs automatically. Result sets are pure REST data, that are snapshot data representations. One reason for this is the assumption that the lifetime of object cache entries (which are essential for ORMs to perform) is frequently in the range of milliseconds for _REST_ services. {.indent} #### CAP != Business Objects diff --git a/about/index.md b/about/index.md index a2d91caf5..8252d2821 100644 --- a/about/index.md +++ b/about/index.md @@ -63,7 +63,7 @@ Benefits are significantly **accelerated** development, **minimized boilerplate* #### Enterprise Best Practices -- [Common Reuse Types & Aspects](/cds/ommon) +- [Common Reuse Types & Aspects](/cds/common) - [Managed Data](/guides/domain-modeling#managed-data) - [Localized Data](/guides/localized-data) - [Temporal Data](/guides/temporal-data)