aboutsummaryrefslogtreecommitdiffstats
path: root/db/normalized/README.md
blob: 30228cbb0d3102fc0e96ef0d0903c17efe318856 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# General guidelines for Database schema:

- Some 1-1 tables are split up simply to separate scope or to control access permission (ie only user_preferences table may be edited by users themselves)

- String fields which have a finite number of options should be changed to either:
  - an FK to a separate lookup table (when the options is large or can grow)
  - an enum (when there are a short list of essentailly static options)

- Field names should follow SQL standards:
  - lower case
  - underscore_separated_words

- options should be standardized with: 
  {
    tableName: "table_name",
    comment: "description of table if not self-evident",
    timestamps: true,
    createdAt: 'created_at',
    updatedAt: 'updated_at',
    indexes: [
      {}
    ]
  };
    - note createdAt, updatedAt are renamed to abide by SQL standard.

  - by default allowNull is false, so this attribute need only be specified when fields are NOT NULL.

  - comment attribute should added to any field that is not self-evident

  - may need to add indexes to more fields for rapid access  

  ## Questions:
  - Are indexes automatically generated for primary keys and/or foreign keys ?
  - Do we add non-unique indexes for data mining: eg { fields: ['username'] }
  - Do timestamp fields require default value spec (eg Sequelize.NOW) ?

  - payments table needs to be investigated
  - is invoices required or just summary information ?
  - need to add orders table 
  - need to add subscriptions table if applicable (?)