= Relational Design = == Notation == * Primary keys are bolded and underlined. * Foreign keys are marked with `*` at the end of their name and the referenced entity is written in parentheses. * Required (not optional) attributes are bolded. == Tables == 1. '''Users''' ('''**id**''', '''username''', '''password''', '''email''') 2. '''Admins''' ('''**user_id**'''* (Users)) 3. '''Components''' ('''**id**''', '''name''', '''brand''', '''price''', img_url) 4. '''CPU''' ('''**component_id**'''* (Components), '''socket''', '''cores''', '''threads''', '''base_clock''', boost_clock, '''tdp''') 5. '''GPU''' ('''**component_id**'''* (Components), '''vram''', '''tdp''', base_clock, boost_clock, '''chipset''', '''length''') 6. '''Memory''' ('''**component_id**'''* (Components), '''type''', '''speed''', '''capacity''', '''modules''') 7. '''Storage''' ('''**component_id**'''* (Components), '''type''', '''capacity''', '''form_factor''') 8. '''Power_Supply''' ('''**component_id**'''* (Components), '''type''', '''wattage''', '''form_factor''') 9. '''Motherboard''' ('''**component_id**'''* (Components), '''socket''', '''chipset''', '''form_factor''', '''ram_type''', '''num_ram_slots''', '''max_ram_capacity''') 10. '''PC_Case''' ('''**component_id**'''* (Components), '''cooler_max_height''', '''gpu_max_length''') 11. '''Case_Storage_Form_Factors''' ('''**case_id**''', '''**form_factor**''') 12. '''Case_PS_Form_Factors''' ('''**case_id**''', '''**form_factor**''') 13. '''Case_Mobo_Form_Factors''' ('''**case_id**''', '''**form_factor**''') 14. '''Cooler''' ('''**component_id**'''* (Components), '''type''', '''height''', '''max_tdp_supported''') 15. '''Cooler_CPU_Sockets''' ('''**cooler_id**''', '''**socket**''') 16. '''Memory_Card''' ('''**component_id**'''* (Components), '''num_slots''', '''interface''') 17. '''Optical_Drive''' ('''**component_id**'''* (Components), '''form_factor''', '''type''', '''interface''', '''write_speed''', '''read_speed''') 18. '''Sound_Card''' ('''**component_id**'''* (Components), '''sample_rate''', '''bit_depth''', '''chipset''', '''interface''') 19. '''Sound_Card_Channels''' ('''**sound_card_id**''', '''**channel**''') 20. '''Cables''' ('''**component_id**'''* (Components), '''length_cm''', '''type''') 21. '''Network_Adapter''' ('''**component_id**'''* (Components), '''wifi_version''', '''interface''', '''num_antennas''') 22. '''Network_Card''' ('''**component_id**'''* (Components), '''num_ports''', '''speed''', '''interface''') 23. '''Build''' ('''**id**''', '''user_id'''* (Users), '''name''', '''created_at''', description, '''total_price''', '''is_approved''') 24. '''Build_Component''' ('''**build_id**''', '''**component_id**''') 25. '''Favorite_Build''' ('''**build_id**''', '''**user_id**''') 26. '''Rating_Build''' ('''**build_id**''', '''**user_id**''', '''value''') 27. '''Review''' ('''**id**''', '''build_id'''* (Build), '''user_id'''* (Users), '''content''', '''created_at''') 28. '''Suggestions''' ('''**id**''', '''user_id'''* (Users), admin_id* (Admins), '''link''', admin_comment, description, '''status''', '''component_type''') == DDL script for creating the database schema == [attachment:schema_creation.sql] == DML script for filling tables with data == [attachment:data_load.sql] == Relational diagram == [[Image(relational-diagram.png)]]