首页 > 解决方案 > 创建在包含的数据类型上没有区别的语义 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 表吗?

标签: sqldatabase-design

解决方案


对用户而言,项目(拥有/愿望清单)的状态似乎是用户-项目关系的一个属性。因此,两个表中的数据应该存储在一个表中,状态作为另一列。此外,如果将来会有更多这样的状态,那只是状态列中允许的附加值。

如果您真的想拥有单独的表名(从问题中不清楚动机),您可以使用适当的过滤器在表顶部创建视图。HTH。


推荐阅读