Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/DesignDocs/283430"
(→Config files) |
m (→Open Issues) |
||
(8 intermediate revisions by the same user not shown) | |||
Line 20: | Line 20: | ||
= Project overview = | = Project overview = | ||
− | + | The ability to define database indexes and have EclipseLink's DDL generation generate them. | |
= Concepts = | = Concepts = | ||
− | + | An index is a database structure define for a table to improve query and lookup performance for a set of columns. | |
= Requirements = | = Requirements = | ||
+ | Support defining indexes in JPA through annotations. | ||
+ | Support defining indexes in JPA through XML. | ||
= Design Constraints = | = Design Constraints = | ||
− | + | Must be database independent. | |
= Functionality = | = Functionality = | ||
+ | An @Index annotation and XML will be added. An index can be defined on an Entity, or attribute. | ||
+ | For the Entity it must define a set of columns to index, the table will be defaulted. | ||
+ | For an attribute the table and column will be defaulted. | ||
+ | The name of the index will be default to <table>_<column>_INDEX, but the name should normally be provided. | ||
+ | An IndexDefinition will also be added to the schema framework to allow defining, creating/dropping indexes through code. | ||
+ | Annotation process will create an IndexDefinition from the @Index and store in on the descriptor's DatabaseTable. | ||
+ | During default schema generation the DefaultSchemaGenerator will add the IndexDefinition to the TableDefition to be created. | ||
+ | |||
+ | The existing support to create indexes for primary key and unique constraints will be refactored to use the IndexDefinition. | ||
+ | |||
+ | Support for indexes will be defined in the platform, by default a platform will be assumed to support indexes. | ||
+ | MySQL will require special drop syntax, to include the table name in the drop statement. | ||
= Testing = | = Testing = | ||
Line 43: | Line 57: | ||
* Index | * Index | ||
− | * @Index(name, table, unique, columns[]) | + | * @Index(name<String>, schema<String>, catalog<String> table<String>, unique<boolean>, columns<String>[]) |
* @Indexes | * @Indexes | ||
Line 49: | Line 63: | ||
* orm.xml | * orm.xml | ||
<source lang="xml"> | <source lang="xml"> | ||
− | <index name=" | + | <index name="EMP_NAME_INDEX" table="EMPLOYEE" unique="true"> |
− | <column | + | <column>F_NAME</column> |
− | <column | + | <column>L_NAME</column> |
</index> | </index> | ||
</source> | </source> | ||
Line 58: | Line 72: | ||
Should be documented under extended annotations, and schema generation. | Should be documented under extended annotations, and schema generation. | ||
− | = Open Issues= | + | = Open Issues = |
− | {| | + | {| class="FCK__ShowTableBorders" |
− | |- | + | |- |
− | ! Issue # | + | ! Issue # |
− | ! Owner | + | ! Owner |
! Description / Notes | ! Description / Notes | ||
− | |- | + | |- |
− | | 1 | + | | 1 |
+ | | | ||
| What databases support indexes, do any use a different syntax? | | What databases support indexes, do any use a different syntax? | ||
+ | |- | ||
+ | | 2 | ||
+ | | | ||
+ | | | ||
+ | Shouldn't the @Index annotation support choosing the various types of index | ||
+ | algorithms supported by the database being used? We may need to add another | ||
+ | attribute to @Index, named 'type' that can take a value from predefined | ||
+ | list of values like BTree, RTree, Hash, BitMap, etc. Further, there should | ||
+ | be a way to define clustered indexes too, may be an attribute | ||
+ | clustered=true/false. | ||
+ | |||
|} | |} | ||
− | = Decisions = | + | = Decisions = |
− | {| | + | {| class="FCK__ShowTableBorders" |
− | |- | + | |- |
− | ! Issue | + | ! Issue |
− | ! Description / Notes | + | ! Description / Notes |
! Decision | ! Decision | ||
− | |||
− | |||
|} | |} | ||
= Future Considerations = | = Future Considerations = | ||
* Other DDL options. | * Other DDL options. |
Latest revision as of 16:18, 6 September 2010
Design Specification: Indexes
Document History
Date | Author | Version Description & Notes |
---|---|---|
2010-08-25 | James | 0.1 Draft |
Project overview
The ability to define database indexes and have EclipseLink's DDL generation generate them.
Concepts
An index is a database structure define for a table to improve query and lookup performance for a set of columns.
Requirements
Support defining indexes in JPA through annotations. Support defining indexes in JPA through XML.
Design Constraints
Must be database independent.
Functionality
An @Index annotation and XML will be added. An index can be defined on an Entity, or attribute. For the Entity it must define a set of columns to index, the table will be defaulted. For an attribute the table and column will be defaulted.
The name of the index will be default toIssue # | Owner | Description / Notes |
---|---|---|
1 | What databases support indexes, do any use a different syntax? | |
2 |
Shouldn't the @Index annotation support choosing the various types of index algorithms supported by the database being used? We may need to add another attribute to @Index, named 'type' that can take a value from predefined list of values like BTree, RTree, Hash, BitMap, etc. Further, there should be a way to define clustered indexes too, may be an attribute clustered=true/false. |
Decisions
Issue | Description / Notes | Decision |
---|
Future Considerations
- Other DDL options.