【結構設計】數據表設計、常用表結構設計

數據庫設計兩個必須

為了建立冗余較小、結構合理的數據庫,設計數據庫時必須遵循一定的規則。在關系型數據庫中這種規則就稱為范式。

最為常見的設計范

細分字段,確保每列可用

比如:某些數據庫系統中需要用到“地址”這個字段

地址一般包括:省 市 縣 區 詳細地址

我們當然可以存儲一個字段 使用分隔符、json、等存儲

  • 缺點本來直接將“地址”字段,設計成一個數據庫表的字段就行。
  • 優點將“地址”這個屬性重新拆分為省份、城市、詳細地址等多個部分進行存儲,這樣在對地址中某一部分操作的時候將非常方便。這樣設計才算滿足了數據庫添加修改刪除查詢的便利

關聯使用主鍵、避免字段冗余字段

  • 表與表之間關聯,使用主鍵。主鍵是一種索引,可以提高效率
  • 多關聯建議使用中間表

設計數據實例

公共評論表數據庫結構設計

介紹
  • 滿足大部分系統回復功能。使用CommentedObjectId,無論對文章資訊新聞等等都可以評論
  • 滿足根據子評論查詢所有父評論的功能,因為 ParentIdList格式為 ,id,id,id, 可以滿足模糊查詢 ParentIdList like ',%id%,'
  • 滿足用戶評論用戶的功能。可以互相回復
字段介紹
字段 介紹
Id bigint 'Id',
ParentId int '父評論Id',
ParentIdList varchar '父評論Id',
ChildCount int '子級評論數量',
edObjectId int '被評論對象Id',
OwnerId int '所屬ID',
TenantTypeId int '租戶類型Id',
UserId int '評論人UserId',
UserName varchar '評論人名稱',
ToUserId int '被回復UserId(一級ToUserId為0)',
ToUserName varchar '被回復人名稱(一級ToUserDisplayName為空字符串)',
Title varchar '標題',
Body varchar '內容',
IsPrivate tinyint '是否悄悄話',
IsAnonymous tinyint '是否匿名評論',
AuditStatus tinyint '審核狀態',
IsDel tinyint '是否刪除',
LikeCount int '喜歡數量',
CreateTime datetime '創建時間',
StarCount int '星級評價',
Depth int '深度',
Mysql 腳本
CREATE TABLE `sop_comments`  (
  `Id` bigint(8) NOT NULL AUTO_INCREMENT COMMENT 'Id',
  `ParentId` int(11) NULL DEFAULT NULL COMMENT '父評論Id',
  `ParentIdList` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '父評論Id',
  `ChildCount` int(4) NULL DEFAULT 0 COMMENT '子級評論數量',
  `Depth` int(255) NULL DEFAULT NULL COMMENT '深度',
  `CommentedObjectId` int(11) NULL DEFAULT NULL COMMENT '被評論對象Id(是話題還是文章、百科、商城、等等......)',
  `OwnerId` int(11) NULL DEFAULT NULL COMMENT '所屬ID',
  `TenantTypeId` int(11) NULL DEFAULT NULL COMMENT '租戶類型Id',
  `UserId` int(11) NULL DEFAULT NULL COMMENT '評論人UserId',
  `UserName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '評論人名稱',
  `ToUserId` int(11) NULL DEFAULT NULL COMMENT '被回復UserId(一級ToUserId為0)',
  `ToUserName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '被回復人名稱(一級ToUserDisplayName為空字符串)',
  `Title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '標題',
  `Body` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '內容',
  `IsPrivate` tinyint(4) NULL DEFAULT NULL COMMENT '是否悄悄話',
  `IsAnonymous` tinyint(2) NULL DEFAULT NULL COMMENT '是否匿名評論',
  `AuditStatus` tinyint(4) NULL DEFAULT 0 COMMENT '審核狀態',
  `IsDel` tinyint(2) NULL DEFAULT 1 COMMENT '是否刪除',
  `LikeCount` int(4) NULL DEFAULT NULL COMMENT '喜歡數量',
  `CreateTime` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '創建時間',
  `StarCount` int(11) NULL DEFAULT 0,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '評論信息表' ROW_FORMAT = Dynamic;

posted @ 2019-11-12 13:17  sopcce  閱讀(77)  評論(1編輯  收藏
最新chease0ldman老人