Как эффективно проектировать таблицы базы данных в Mysql

У меня есть следующее pojo

   public class Like {
     private Long commentId;
     private Collection<Long> accountIds;
   }

   public class Comment {
private Long personId;
    private Long pageId;
    private Long Id;
    private String text;
    private Like like;
    private LocalDate commentDate;
   }

   public class Page {
     private Long Id;
     private Long textId;
     private Collection<Comment> comments;
     private LocalTime postingDate;
     private ViewType type;
     private String mediaUrl;
     private Collection<Long> openAccountIds;
     private Like like;
   }

    public class Text{
      private Long accountId;
      private Long Id;
      private String name;
      private LocalTime firstPostedTime;
      private LocalTime lastPostedTime;
      private ViewType type;
      private Collection<Page> pages;
      private Like like;
      private String description;
      private Collection<Long> openAccountIds;
     }

Теперь у меня есть мой текстовый репозиторий следующим образом:

 public interface TextRepository {

Collection<Text> getAllTexts(Long accountId);

Diary getText(Long TextId);

Page getPage(Long pageId);

Comment getComment(Long commentId);

void addPageToText(Long TextId , Page page);

void addCommentToPage(Long pageId , Comment comment);

void updateText(Text text);

void deletePage(Long pageId);

void deleteComment(Long commentId);

void updateLikeToText(Long textIds);

void updateLikeToPage(Long pageId);

void updateLikeToComment(Long commentId);

}

I am a new bie to mysql. Я хотел знать, как эффективно создавать таблицы mysql, чтобы я мог получить данные за меньшее время. Кроме того, если мои pojo’s содержит какие-либо недостатки в структуре идти вперед, чтобы изменить их или предоставить предложения.

1 ответ

  1. Вот некоторые предложения для объектной модели для рассмотрения (см. комментарии),

    // Specifying all the fields as private will not allow
    // any other class to use the data!
    public class Account
    {
        public String name;
        public String location;
    }
    
    public class Text
    {
        public Collection<Account> likedBy;
        public Collection<Account> openAccounts;
        public Collection<Page> pages;
        public Account postedBy; 
        public String name; // Not sure what this field represents...
        public LocalTime firstPostedTime;
        public LocalTime lastPostedTime;
        public ViewType type;
        public String description;
    
        // Consider using get/set methods for collections, 
        // so as to expose only minimal required information 
    //  public like(Account account)
    //  {
    //      likedBy.add(account);
    //  }
    //  
    //  public dislike(Account account)
    //  {
    //      likedBy.remove(account);
    //  }
    }
    
    public class Page
    {
        public Collection<Comment> comments;
        public LocalTime postingDate;
        public ViewType type;
        public String mediaUrl;
        public Collection<Account> openAccounts;
        public Collection<Account> likedBy;
    
    //  public addComment(Comment comment)
    //  {
    //      ...
    //      Update posting date
    //  }
    //  
    //  public addOpenAccount(Account account)
    //  {
    //      ...
    //  }
    }
    
    public class Comment 
    {
        public Account postedBy;
        public String text;
        public Collection<Account> likedBy;
        public LocalDate commentDate;
    }
    

    Следующим шагом будет построение диаграммы отношений сущностей. При нормализации схемы вводятся первичные ключи и внешние ключи (xxxId).

    Схема может выглядеть следующим образом,

    • Account [id, имя, местоположение]
    • ViewType [id, описание]
    • Comment [id, posted_by_account_id, text, postedDate]
    • CommentLikes [comment_id, account_id]
    • Text [id, account_id, name, firstPostedTime, lastPostedTime, type_Id, description]
    • TextAccounts [text_id, account_id]
    • TextLikes [text_id, account_id]
    • TextPages [text_id, page_id]
    • Page [id, mediaUrl, type_id, postingDate]
    • PageLikes [page_id, account_id]
    • PageComments [page_id, comment_id]
    • PageAccounts [page_id, account_id]