相关疑难解决方法(0)

用 MySQL 实现版本控制系统

我知道这里这里有人问这个问题,但我有不同的可能实现的相同想法,我需要一些帮助。

最初,我的blogstories表具有以下结构:

| Column    | Type        | Description                                    |
|-----------|-------------|------------------------------------------------|
| uid       | varchar(15) | 15 characters unique generated id              |
| title     | varchar(60) | story title                                    |
| content   | longtext    | story content                                  |
| author    | varchar(10) | id of the user that originally wrote the story |
| timestamp | int         | integer generated with microtime()             |
Run Code Online (Sandbox Code Playgroud)

在我决定要为博客上的每个故事实施一些版本控制系统后,我想到的第一件事就是创建一个不同的表来保存编辑;在那之后,我想我可以修改现有的表来保存版本而不是edits。这是我想到的结构:

| Column …
Run Code Online (Sandbox Code Playgroud)

mysql database-design

17
推荐指数
2
解决办法
1万
查看次数

我将如何跟踪数据库中的所有价格变化,以便在“y”日期获得“x”产品的价格

我需要跟踪产品价格变化,以便我可以在数据库中查询给定日期的产品价格。该信息用于计算历史审计的系统中,因此它必须根据购买日期返回正确产品的正确价格。

我更喜欢使用 postgres 来构建数据库。

我需要数据库的设计,但也欢迎任何和所有最佳实践建议。

database-design best-practices

9
推荐指数
1
解决办法
6183
查看次数

第三范式:复合 PRIMARY KEY 与系​​统生成的代理 (IDENTITY)

我正在研究一个数据建模项目,我正在尝试为一个history只有四列的表找出最好的数据建模方法:

CREATE TABLE FooHistory
(
    SecurityID  INT (FK),     -- Part of the natural PK.
    FieldID     INT (FK),     -- Part of the natural PK.
    DateCreated DATETIME2(0), -- Part of the natural PK.
    Value       VARCHAR(50)
);
Run Code Online (Sandbox Code Playgroud)

此表中的自然复合 KEY 将是(DateCreated, SecurityId, FieldID),并且 ETL 过程每 30 分钟将向此表添加 ~ 2K 行。

问题

  1. 声明复合 PRIMARY KEY (PK)(DateCreated, SecurityId, FieldID)与添加新 IDENTITY 列(即系统生成的代理)并将其用作 PK 的优缺点?

  2. 我相信,如果我添加一个 IDENTITY 列并将其用作 PK,那么该表将不会处于第三范式(3NF)中,因为非 PK 列之间将存在函数依赖关系,即,(DateCreated, SecurityId, FieldID)Value.

  3. 由于此表保留了历史数据,因此我不希望将此表加入其他外部表,应用程序将主要使用 SELECT 语句与其进行交互。基于这些假设,将表保持在 …

normalization database-design sql-server sql-server-2014

6
推荐指数
1
解决办法
2720
查看次数

何时使用唯一组合键?

在创建数据库结构时,我倾向于为每组需要唯一的数据创建唯一的复合键。在它们旁边我通常使用主键(通常是 INT AI id),除非复合键确实足以识别记录。

一方面,好处是我可以避免插入“坏记录”。是否存在这些密钥的使用变得过多或数据库设计不佳的迹象?

database-design unique-constraint

6
推荐指数
1
解决办法
8640
查看次数

为大量不同的实体存储创建/退休日期

在我现在正在处理的数据库中,几乎每个实体都有这 4 列:

CreatedDate
CreatedBy
RetiredDate
RetiredBy
Run Code Online (Sandbox Code Playgroud)

通常这用于记录目的,对于某些实体来说,知道它何时退役的有用性是有争议的(但不要告诉我的老板)。对于其他一些东西,(比如卡车)它更有意义,因为“退役”的车辆可能会重新投入使用。

无论如何,我想知道将这些信息放在一张桌子上是否是个好主意,因为它到处重复。如果是的话,任何人都有一个好名字..?简单created_retired_dates吗?

schema normalization database-design

4
推荐指数
1
解决办法
1801
查看次数

我应该为不同的实体状态、状态或阶段创建多个表吗?

我的tasks数据库中有一个表,在感兴趣的业务领域中,任务可以有多种状态:“打开”、“开始”、“审查中”和“已完成”。

尽管在同一个表中有“打开”和“开始”,但使用标志标识,但出于某种原因,我很早就决定将“审查中”和“已完成” 任务放在他们自己的单独表中。虽然这似乎是一个好主意,可以轻松查询特定事物,但当我考虑为任务实现注释功能时,我意识到值会在三个表中发生变化。task_id

我做错了吗?

当前的考虑

我想到的一些解决方案是重做组织并将所有内容放在一张桌子上,使用标志来纯粹区分状态(这将导致大量的返工);创建某种UUID可以跨表转移的东西 - 尽管我认为如果这样做可能会导致性能问题;最后,将IDs跨表设置为不再自动递增,并简单地“继承”第一个task表(自动递增)的原始值。

在这种情况下做了什么?我不是最精通数据库设计的人,而且我在进行过程中正在编造这一点。

任何帮助将不胜感激。

对@MDCCL 通过评论提出的进一步信息请求的回应

因此,状态(或状态)一个的任务,可以随着时间而改变,对不对?同一个具体的任务可以出现多少次相同的状态,比如“打开”?它会根据相关任务呈现的状态类型而变化吗?

是的,一个task.state理论上最多可以改变四次。我不会详细介绍逻辑,但最长的链将是“begun” ? “completed” ? “review” ? “completed”. 每次,目前,它们都被放入另一张桌子。

例外的是,无论它是否“开始”,用户都可能会无限地放弃然后重新执行任务——至少在理论上是这样。这至少得益于“开始”状态是一个标志这一事实。

好的,但是某个任务将始终呈现一个特定的“当前”状态,对吗?例如,当 …

mysql database-design

4
推荐指数
1
解决办法
1112
查看次数