sql - 创建在包含的数据类型上没有区别的语义 SQL 表是错误的吗?
问题描述
为了论证起见,假设我有用户表和项目表。
User
----------
id
userName
Item
----------
id
itemName
cost
然后,为了实现一个解决方案来找出用户已经拥有的项目与用户想要的项目,我用外键创建了另外两个表
User_ItemOwned
----------
id
userId (fk)
itemId (fk)
User_ItemWishlist
----------
id
userId (fk)
itemId (fk)
从表面上看,这些表除了表名之外似乎是相同的。这让我觉得很奇怪,让我想到了一个问题——从数据库设计的角度来看,拥有两个存储相同数据类型但纯粹基于表标题而完全不同的数据库表是否存在固有的问题?更有效的设计是拥有一个包含状态类别(Wishlist 或 Owned)的 User_Item 表吗?
解决方案
对用户而言,项目(拥有/愿望清单)的状态似乎是用户-项目关系的一个属性。因此,两个表中的数据应该存储在一个表中,状态作为另一列。此外,如果将来会有更多这样的状态,那只是状态列中允许的附加值。
如果您真的想拥有单独的表名(从问题中不清楚动机),您可以使用适当的过滤器在表顶部创建视图。HTH。
推荐阅读
- flutter - Flutter:在启动时显示一个对话框
- javascript - 在 React Web 应用程序中通过数组映射返回“未定义”
- javascript - 如何使用 alpha beta 剪枝实现转置表
- python-3.x - 为什么我不能制作具有大量值的相关矩阵
- arrays - 如何复制字节数组
- vb.net - 是否可以将 VB.Net MDI 子窗体移动到另一个屏幕?
- python - 在 Pandas df 行中查找值并返回列名
- python - 如何使用正则表达式将字符串拆分为不同长度的块
- android - 询问用户是否允许录制音频、读取手机状态和前台服务?
- batch-file - 在 2 个预定义路径之间选择对话框