mysql - 是否值得将整数作为字符串存储在表中,因为它非常适合业务逻辑?
问题描述
在我的应用程序中,有两种类型的用户,匿名用户和经过身份验证的用户。经过身份验证的用户使用整数作为 id,匿名用户使用 uuid 作为 id。有一个表 Item 存储用户拥有的项目。我对如何在一个表中存储不同的 id 有两个想法首先将列创建user_id
为字符串并将两个用户 id 存储在一个列中:
Item
+---------+----------------------------------------+----------+
| item_id | user_id | quantity |
+---------+----------------------------------------+----------+
| 1 | '1' | 2 |
| 2 | 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11' | 3 |
| 3 | '2' | 1 |
+---------+----------------------------------------+----------+
其次创建两个不同的列user_id
(整数)和anon_user_uuid
(uuid),
Item
+---------+---------+----------------------------------------+----------+
| item_id | user_id | anon_user_uuid | quantity |
+---------+---------+----------------------------------------+----------+
| 1 | 1 | null | 2 |
| 2 | null | 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11' | 3 |
| 3 | 2 | null | 1 |
+---------+---------+----------------------------------------+----------+
在第一种情况下,我需要编写四个查询来检索、更新、创建、删除项目。
其次,我需要为 crud 操作编写 8 个查询。
所以我的问题是,在第一种情况下(上面的第一个表)进行设计是否可以?
解决方案
看起来您有两种完全不同类型的值。在这种情况下,两列是合适的。
您将它们作为一列的原因是您可以设置外键或其他关系,但如果其中一些不能像那样匹配,这是不可能的。
为了保持一致性,您可能希望为每个用户提供一个“匿名”ID,然后在内部使用它。其中一些可能映射到注册用户,另一些可能不会。
也可以只为匿名用户创建用户记录,如果用户事后注册,只需填充其他字段并将状态更改为“已注册”。
推荐阅读
- python - 有哪些技术可以允许 tkinter 程序中的多个线程?
- swift - 如何防止后退按钮消失?
- spring - 将单模块 gradle 项目转换为多模块
- javascript - 在javascript中替换深层嵌套在对象中的函数
- r - 你能用 rOxygen2 分享函数之间的例子吗?
- java - id always = 0 因为结果无法更新数据库中的记录
- reactjs - Intersection Observer 丢失条目
- flutter - 如何在颤动的抽屉中添加分隔符和字幕
- typescript - 当我无头运行时我的测试失败了,因为它是不可见的
- javascript - 模态打开时显示相同的视频