Δημιουργία πινάκων brands, categories, product_images, inventory

Θα δημιουργήσουμε τους πίνακες brands, categories, product_images, inventory στη βάση δεδομένων, καθώς και τα αντίστοιχα entities τους.

pgAdmin4

Θα χρησιμοποιήσουμε το pgAdmin4, για την δημιουργία των πινάκων

Πίνακας categories

Ο πίνακας categories( id, name) περιέχει τις κατηγορίες των προϊόντων. Η εντόλη δημιουργίας του πίνακα δίνεται παρακάτω Category Table

Θα δημιουργήσουμε ένα package springeshop.model, όπου θα τοποθετούμε τα entities. Μέσα σε αυτό δημιουργούμε το entity Category.

                
                        @Entity
                        @Table(name = "categories")
                        public class Category{

                           @Id
                           @GeneratedValue(strategy = GenerationType.IDENTITY)
                           @Column(name = "id")
                           private int id;

                           @Column(name = "name")
                           @NotNull(message = "Please provide category name")
                           @Size(min = 3, max = 200, message = "Name must be between 3 and 200 characters")
                           private String name;

                           public Category() {}

                           //Getters - Setters ...

                        } 
                
            
Πίνακας brands

Ο πίνακας brands( id, name) περιέχει τις μάρκες των προϊόντων. Η εντόλη δημιουργίας του πίνακα δίνεται παρακάτω Brands Table

Δημιουργούμε το entity Brands.

                
                        @Entity
                        @Table(name = "brands")
                        public class Brand{

                           @Id
                           @GeneratedValue(strategy = GenerationType.IDENTITY)
                           @Column(name = "id")
                           private int id;

                           @Column(name = "name")
                           @NotNull(message = "Please provide brand name")
                           @Size(min = 3, max = 200, message = "Name must be between 3 and 200 characters")
                           private String name;

                           public Brand() {}

                           //Getters - Setters ...

                        } 
                
            
Πίνακας products

Ο πίνακας products( id, category_id, brand_id, name, price, description, is_favorite, is_new) περιέχει τα διάφορα προϊόντα. Έχει δύο ξένα κλειδιά category_id και brand_id, που δείχνουν στους πίνακες categories και brands. Μια κατηγορία περιέχει πολλά προϊόντα, ενώ ένα προϊόν ανήκει σε μία μόνο κατηγορία. Αντίστοιχα, μια μάρκα μπορέι, να έχει πολλά προϊόντα, ενώ ένα προϊόν έχει μία μοναδική μάρκα.

Η εντόλη δημιουργίας του πίνακα δίνεται παρακάτω

Products Table

Δημιουργούμε το entity Product.

                
                        @Entity
                        @Table(name = "products")
                        public class Product{

                           @Id
                           @GeneratedValue(strategy = GenerationType.IDENTITY)
                           @Column(name = "id")
                           private int id;

                           @ManyToOne(optinal = false)
                           @JoinColumn(name = "category_id")
                           @NotNull
                           private Category category;

                           @ManyToOne(optinal = false)
                           @JoinColumn(name = "brand_id")
                           @NotNull
                           private Brand brand;

                           @Column(name = "name")
                           @NotNull(message = "Please provide product name")
                           @Size(min = 3, max = 200, message = "Name must be between 3 and 200 characters")
                           private String name;

                           @Column(name = "price")
                           @NotNull(message = "Please provide product price")
                           @Min(value = 0, message = "Price must be greater than zero")
                           private double price;

                           @Column(name = "description")
                           private String description;

                           @Column(name = "is_favorite")
                           @NotNul(
                           private boolean is_favorite;

                           @Column(name = "is_new")
                           @NotNull
                           private boolean is_new;

                           public Product() {}

                           //Getters - Setters ...

                        } 
                
            
Πίνακας product_images

Ο πίνακας product_images( id, product_id, small_image_url, large_image_url, very_small_image_url) περιέχει την εικόνα του κάθε προϊόντος (3 μεγέθη). Κάθε γραμμή του πίνακα product_images αντιστοιχεί σε μια γραμμή του πίνακα products και το αντίστροφο. Η εντόλη δημιουργίας του πίνακα δίνεται παρακάτω Product Images Table

Δημιουργούμε το entity ProductImage.

                
                        @Entity
                        @Table(name = "product_images)
                        public class ProductImage{

                           @Id
                           @GeneratedValue(strategy = GenerationType.IDENTITY)
                           @Column(name = "id")
                           private int id;

                           @OneToOne(fetch = FetchType.LAZY)
                           @JoinColumn(name = "product_id")
                           private Product product;

                           @Column(name = "small_image_url")
                           @NotNull(message = "Please provide the small image url")
                           private String smallImageurl;

                           @Column(name = "large_image_url")
                           @NotNull(message = "Please provide the large image url")
                           private String largeImageurl;

                           @Column(name = "very_small_image_url")
                           @NotNull(message = "Please provide the very small image url")
                           private String verySmallImageurl;

                           public ProductImage() {}

                           //Getters - Setters ...

                        } 
                
            
Πίνακας inventory

Ο πίνακας inventory( id, product_id, quantity) περιέχει το απόθεμα του κάθε προϊόντος). Κάθε γραμμή του πίνακα inventory αντιστοιχεί σε μια γραμμή του πίνακα products και το αντίστροφο. Η εντόλη δημιουργίας του πίνακα δίνεται παρακάτω : inventory Table

Δημιουργούμε το entity Inventory.

                
                        @Entity
                        @Table(name = "inventory)
                        public class Inventory{

                           @Id
                           @GeneratedValue(strategy = GenerationType.IDENTITY)
                           @Column(name = "id")
                           private int id;

                           @OneToOne(fetch = FetchType.LAZY)
                           @JoinColumn(name = "product_id")
                           private Product product;

                           @Column(name = "quantity")
                           @NotNull
                           @Min(value = 0)
                           private int quantity;

                           public Inventory() {}

                           //Getters - Setters ...

                        }