gpt4 book ai didi

sql - 创建具有 "either or"类型字段的数据库表

转载 作者:行者123 更新时间:2023-12-03 17:39:16 29 4
gpt4 key购买 nike

我有一个数据库,可以跟踪玩家的游戏尝试。为了实现这一目标,我保留了一个用户表并将尝试存储在一个单独的表中。这些表的架构是:

CREATE TABLE users (
id BIGINT PRIMARY KEY, -- the local unique ID for this user
name TEXT UNIQUE, -- a self-chosen username for the user
first_name TEXT, -- the user's first name
last_name TEXT, -- the user's last name
email TEXT, -- the user's email address
phone TEXT -- the user's phone number
);

CREATE TABLE trials (
timestamp TIMESTAMP PRIMARY KEY, -- the time the trial took place
userid BIGINT, -- the ID of the user who completed the trial
score NUMERIC, -- the score for the trial
level NUMERIC, -- the difficulty level the trial ran at
penalties NUMERIC -- the number of penalties accrued in the trial
);

现在我需要能够存储来自“临时”用户的尝试。这些尝试不应链接回现有用户。但是,这些临时用户仍然可以输入显示在结果中的名称。该名称不需要在表中唯一,因为它不代表“真实”用户。

我的第一个想法是在 Trials 表中创建一个名为 name 的新字段。如果 userid 为 null,我就知道它是临时用户,但我仍然能够在结果中显示 name 字段。这种方法听起来不太对劲,而且似乎会让我的查询变得更加复杂。此外,从某种意义上说,我似乎在复制数据。

另一个想法是将 userid 替换为 userref 文本字段,该文本字段是代表用户的某种格式化字符串。例如,如果该值括在大括号中,我就知道它是一个 ID,即 {58199204}。如果未包含该值,我会将其视为临时用户。这更准确地代表了我在概念上尝试执行的操作(即,它是 ID 或临时用户字符串),但它确实会使我的查询变得复杂。

我使用 SQLite 作为后端...它缺少 SQL Server 或 MySQL 的一些扩展功能。

对这些或解决问题的其他方法有什么想法吗?

最佳答案

没有更多关于为什么临时用户可以使用但不存在于系统中的信息,我同意您的想法:

  1. TRIALS 表添加 NAME
  2. TRIALS 表中的 USER_ID 列设为可为空/可选,以指示暂时的用户状态

如果您可以允许系统中存在临时用户,我建议:

  1. 创建 USER_TYPE_CODE
  2. 更新 USERS 表以包含 USER_TYPE_CODE 列(带有对 USER_TYPE_CODE 表的外键引用)

关于sql - 创建具有 "either or"类型字段的数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1671949/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com