# 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: [ { } ] }; ## 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.