aboutsummaryrefslogtreecommitdiffstats
path: root/db/normalized/README.md
blob: fd3cb0d336cc0680d9e0d8ef4f6f3d2e60b4bccc (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
42
43
44
45
46
47
48
# General guidelines for Database schema:

- String fields whose values are NOT open-ended (ie can contain random strings) should be changed to either:
  - an FK to a separate lookup table (when the domain of 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 for designated models should be standardized with: 
  {
    tableName: "table_name",
    comment: "description of table if not self-evident",
    timestamps: true,
    createdAt: 'created_at',
    updatedAt: 'updated_at',
    indexes: [
      { <as required> }
    ]
  };
  
 ## Note regarding field attributes specified in model:
 
  - 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  

  ## Notes regarding changes / updates

  - 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)

  ## Sequelize Operational  Questions:
  - Are indexes automatically generated by Sequelize migration for primary keys and/or foreign keys ?
  - Does Sequelize add non-unique indexes for data mining if specified: eg { fields: ['username'] }
  - Do timestamp fields require default value spec (eg Sequelize.NOW) ... or how can we define this in model ?

  ## Ongoing Questions:
  - payments table needs to be investigated and refactored
  - is invoices table required or is this just summary information ?
  - orders table needs to be investigated and refactored 
  - need to add subscriptions table if applicable ( what is this comprised of ?)
  - user_keys table should be commented to clarify application of each of these values.