小编Cal*_*der的帖子

31亿行数据如何管理?

我目前的任务是为相对大量的数据实施存储模式。将主要访问数据以确定当前data point值,但我还需要跟踪过去六个月的历史数据趋势/分析。

加入最近要求跟踪min/ max/sum在过去的小时值。

注意:理想情况下,我想考虑 MongoDB 选项,但我需要先证明我已经用完了 SQL-Server 选项。

数据

下表表示主要数据源(最常查询)。该表将有大约 500 万行。数据更改将主要是初始数据加载后UPDATE非常偶然的INSERT语句。我选择了对数据进行聚类,dataPointId因为您将始终选择all values for a given data point.

// Simplified Table
CREATE TABLE [dbo].[DataPointValue](
    [dataPointId]  [int] NOT NULL,
    [valueId]      [int] NOT NULL,
    [timestamp]    [datetime] NOT NULL,
    [minimum]      [decimal](18, 0) NOT NULL,
    [hourMinimum]  [decimal](18, 0) NOT NULL,
    [current]      [decimal](18, 0) NOT NULL,
    [currentTrend] [decimal](18, 0) NOT NULL,
    [hourMaximum]  [decimal](18, 0) NOT NULL,
    [maximum]      [decimal](18, 0) …
Run Code Online (Sandbox Code Playgroud)

database-design sql-server

14
推荐指数
1
解决办法
3万
查看次数

意外的唯一约束违反

鉴于以下 CREATE TABLE 语句:

CREATE TABLE [dbo].[Unit]
(
    [id]                SMALLINT       NOT NULL IDENTITY(1,1),
    [name]              VARCHAR(100)   NOT NULL,

    CONSTRAINT [PK_Unit] PRIMARY KEY CLUSTERED ([id]),
    CONSTRAINT [UQ_Unit_Name] UNIQUE ([name])
)
Run Code Online (Sandbox Code Playgroud)

如何在不违反 UNIQUE 约束的情况下允许以下两个字符串共存?

INSERT INTO dbo.Unit (Name) VALUES('e³m³/day') 
INSERT INTO dbo.Unit (Name) VALUES('e3m3/day') 
Run Code Online (Sandbox Code Playgroud)

任何见解表示赞赏。

编辑

当前整理是 Latin1_General_CI_AS

编辑

除非有人有更好的选择,否则我似乎必须使用 Latin1_General_BIN 并在我需要的几个地方手动处理 CI……如果没有提供更好的解决方案,我会将其转换为答案。

sql-server constraint sql-server-2008-r2 string unique-constraint

5
推荐指数
1
解决办法
1066
查看次数