关于1:N的表结构设计

ClsData 2010-04-02 11:04:00
发现两种表结构设计。

主题是关于一个用户发布多条信息。

一、主要总结于一些电子商务类型的网站。

表A User表 表B Pro 产品表


<table cellspacing="0" cellpadding="0" border="1">
<col width="72" span="4" />
<col width="104" />
<tr height="18">
<td height="18" width="72">User表</td>
<td width="72"></td>
<td width="72"></td>
<td width="72"></td>
<td width="104"></td>
</tr>
<tr height="18">
<td height="18"><strong>字段名</strong></td>
<td><strong>中文名</strong></td>
<td><strong>类型</strong></td>
<td><strong>PK</strong></td>
<td><strong>描述</strong></td>
</tr>
<tr height="18">
<td height="18">U_ID</td>
<td>用户id</td>
<td>int</td>
<td>YES</td>
<td>用户id自增</td>
</tr>
<tr height="18">
<td height="18"></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr height="18">
<td height="18">Pro表</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr height="18">
<td height="18"><strong>字段名</strong></td>
<td><strong>中文名</strong></td>
<td><strong>类型</strong></td>
<td><strong>PK</strong></td>
<td><strong>描述</strong></td>
</tr>
<tr height="18">
<td height="18">ID</td>
<td>ID</td>
<td>int</td>
<td>YES</td>
<td>产品主键自增</td>
</tr>
<tr height="18">
<td height="18">U_ID</td>
<td>用户id</td>
<td>int</td>
<td>NO</td>
<td>对应用户ID</td>
</tr>
</table>



一、主要总结于一些生产、银行等企业的软件系统。

表A User表 表B Pro 产品表

<table cellspacing="0" cellpadding="0" border="1">
<col width="72" span="4" />
<col width="104" />
<tr height="18">
<td height="18" width="72">User表</td>
<td width="72"></td>
<td width="72"></td>
<td width="72"></td>
<td width="104"></td>
</tr>
<tr height="18">
<td height="18"><strong>字段名</strong></td>
<td><strong>中文名</strong></td>
<td><strong>类型</strong></td>
<td><strong>PK</strong></td>
<td><strong>描述</strong></td>
</tr>
<tr height="18">
<td height="18">U_ID</td>
<td>用户id</td>
<td>int</td>
<td>YES</td>
<td>用户id自增</td>
</tr>
<tr height="18">
<td height="18"></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr height="18">
<td height="18">Pro表</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr height="18">
<td height="18"><strong>字段名</strong></td>
<td><strong>中文名</strong></td>
<td><strong>类型</strong></td>
<td><strong>PK</strong></td>
<td><strong>描述</strong></td>
</tr>
<tr height="18">
<td height="18">U_ID</td>
<td>用户id</td>
<td>int</td>
<td>YES</td>
<td>对应用户ID</td>
</tr>
<tr height="18">
<td height="18">ID</td>
<td>产品小id</td>
<td>int</td>
<td>YES</td>
<td>当前客户下的ID自增,每次通过事物等计算获得</td>
</tr>
</table>


对比了一下上述两种结构,第二种虽然很容易的分辨出当前用户所属的第几种产品,但需要通过事物或其他形式计算出此用户下当前最大产品id,然后增1.而且是采用复合主键的形式。

相比第一种,就比较简单。

讨论一下这两种表结构各自的优点与缺点,并且在什么类型的系统中更适用于哪种类型,比如一些网页游戏中。
...全文
167 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ClsData 2010-04-02
  • 打赏
  • 举报
回复
@xys_777

我发现很多日本软件,尤其是生产型企业、金融行业都是这种结构。

反倒是国内很多电子商务或者网络平台开发是自增逐渐的方式。

如果说到查询,后台更注重速度和效率,日本软件经常会出现搜索很多相关联的表然后大量计算。

查询时似乎更不方便了。
永生天地 2010-04-02
  • 打赏
  • 举报
回复
其实复合主键那个真的是没多大意义,而其还需要事务控制
也许在查询时能方便些
ClsData 2010-04-02
  • 打赏
  • 举报
回复
非常感谢楼上各位的参与,我并不是想问采用哪种。而是希望大家做如下的讨论:

对比了一下上述两种结构,第二种虽然很容易的分辨出当前用户所属的第几种产品,但需要通过事物或其他形式计算出此用户下当前最大产品id,然后增1.而且是采用复合主键的形式。

相比第一种,就比较简单。

讨论一下这两种表结构各自的优点与缺点,并且在什么类型的系统中更适用于哪种类型,比如一些网页游戏中。

ClsData 2010-04-02
  • 打赏
  • 举报
回复
图片传反了,
黄色图片是《主要总结于一些生产、银行等企业的软件系统》
绿色为《主要总结于一些电子商务类型的网站》
ChinaJiaBing 2010-04-02
  • 打赏
  • 举报
回复

主表+明细表(这样一对多的设计方式)
ClsData 2010-04-02
  • 打赏
  • 举报
回复
竟然不识别成表格,发图吧

形式一



形式二

htl258_Tony 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dawugui 的回复:]
我建议还是老方法:

tb1
id name
1 'A'

tb2
id tb1_id tb2_name
1 1 'A'
2 1 'B'
...
[/Quote]我也赞同此方法
--小F-- 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dawugui 的回复:]
我建议还是老方法:

tb1
id name
1 'A'

tb2
id tb1_id tb2_name
1 1 'A'
2 1 'B'
...
[/Quote]

同意 这样的方法查询速度快 但是会有冗余
dawugui 2010-04-02
  • 打赏
  • 举报
回复
我建议还是老方法:

tb1
id name
1 'A'

tb2
id tb1_id tb2_name
1 1 'A'
2 1 'B'
...
学习计划:1、每天学习1个小时,大概1个月完成。 2、认真听讲,要自己揣摩,明白原理。 3、动手实践、必须要多做课后练习题,遇到不会的,及时提问。课程目标:从一个纯小白,到真正理解变量的实质,指针的实质,学会C++类及面向对象编程课程简介:敬告:该系列的课程在抓紧录制更新中,敬请大家关注。该系列的课程涉及:FFmpeg,WebRTC,SRS,Nginx,Darwin,Live555,等。包括:音视频、流媒体、直播、Android、视频监控28181、等。---------------------------------------------------  ---------------------------------------------------给学员(从小白到大牛)的3年学习路径及计划技术方面分三块:1.纯开发技术方向2.音视频流媒体专业方向3.项目实战---------------------------------------------------1.纯开发技术方向(1) C++必须要过硬(至少学会10本经典好书)(2) 系统级编程(Windows、Linux),必须特别熟练系统API,灵活运用(3) 框架与工具(Qt、MFC):必须精通其中一种。(4) 架构与设计模式:需要提升一个高度,不再是简单的编码,而是思维模式。(5) 驱动级别(如果有兴趣,可以深入到驱动级:包括Windows、Linux)(6) 最好学习点Java+Html+javascript等WEB技术。2.音视频流媒体专业方向(1) 音视频流媒体基础理论:    必须认真学会,否则看代码就是看天书(2) 编解码方向:精通h.264,h.265(hevc), 包括理论和各个开源库(ffmpeg,libx264,libx265,...)。(3) 直播方向:  精通各种直播协议(rtsp,rtmp,hls,http-flv,...), 钻研各个开源库(live555,darwin,srs,zlmediakit,crtmpserver,...)(4) 视频监控:  理论+开源库(onvif+281818)(EasyMonitor、iSpy、ZoneMinder(web)、...)  3.项目实战(1) Qt项目:  至少要亲手练习10个实战项目(网络服务器、多线程、数据库、图像处理、多人聊天、等等)(2)音视频项目:包括编解码、视频监控、直播等各个方向,都需要亲手实战项目,包括视频服务器、后台管理系统、前端播放器(多端)---------------------------------------------------  具体的内容包括: n 1.全书概览与分析 51.1 初步认识:做到心中有数 51.2 图解:章节关系 61.3 探讨:教学方法论 71.4 探讨:学习方法论 71.5 C++的1.0与2.0 81.6 开发工具Qt5.9和VS2015/7/9 8控制台: 8UI界面: 81.7 安装并搭建Qt5.9.8开发环境 91.下载软件Qt Creator 5.9.8 92.双击开始安装 93.注册Qt账号 114.激活Qt账号 125.选择安装路径 176.选择“安装组件” 197.同意“许可协议” 218.点击“安装”后,请喝杯茶 241.8 捋起袖子开干:几个小案例 35第一:写代码打印“CS”图形 36第二:写代码打印各种图形(作业) 361.9 原书第一章剖析 371.计算机是什么? 372.程序是什么? 383.程序设计 384.C++入门程序示例 40n 第2章 C++基础知识 412.1 变量和赋值 412.2 输入和输出 422.3 数据类型和达式 432.4 简单控制流程 442.5 程序风格 452.6 x=x-3到底是个什么鬼? 46第3章 更多的控制流程 473.1 使用布尔达式 473.2 多路分支 483.3 C++循环语句详解 483.4 设计循环 513.5 课堂练习 51第4章 过程抽象和返回值的函数 524.1 自顶向下设计 524.2 预定义函数 534.3 程序员自定义函数 534.4 过程抽象 544.5 作用域和局部变量 554.6 重载函数名称 55第5章 用函数完成所有子任务 565.1 void函数 575.2 传引用参数 575.3 使用过程抽象 595.4 测试和调试函数 595.5 常规调试技术 59第6章 I/O流——对象和类入门 606.1 流和基本文件I/O 606.2 流I/O工具 616.3 字符I/O 62第7章 数组 637.1 数组入门 637.2 函数中的数组 657.3 数组编程 667.4 多维数组 67第8章 字符串和向量 688.1 字符串的数组类型 688.2 标准string类 698.3 向量 71第9章 指针和动态数组 719.1 指针 719.2 手工动态数组 74第10章 定义类 7610.1 结构体 7710.2 类 7810.3 抽象数据类型 8110.4 继承 8210.5 拷贝构造函数 8310.6 析构函数 8410.7 重载赋值(=)操作符 84第11章 友元函数、重载操作符和数组 8611.1 友元函数 8711.2 重载操作符 8811.3 数组和类 9111.4 类和动态数组 91第12章 独立编译和命名空间 9212.1 独立编译 9212.2 命名空间 93第13章 指针和链 94第14章 递归 95第15章 继承 9615.1 继承基础 9615.2 继承细节 9715.3 多态性(虚函数) 98第16章 异常处理 10016.1 异常处理基础 10016.2 用于异常处理的编程技术 101第17章 模板 10217.1 用于算法抽象的模板 10217.2 用于数据抽象的模板 103第18章 标准模板库(STL) 10418.1 迭代器 10418.2 容器 10518.3 泛型算法 10618.4 不断进化的C++ 106第19章 Qt界面开发入门 106附录 107 

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧