标签: database-design

SQL Server 自动关闭选项

对于具有超过 15,000 个具有相同结构的数据库的环境,AutoClose ON 是否是一个糟糕的选择?
我知道我们应该在 99.99% 的情况下将此作为最佳实践。那么这是该功能适用​​的一种边缘情况吗?
在这样的情况下,我们应该注意什么并改进?

database-design sql-server

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

如何建模涉及产品、类别和标签的三向关联?

我有以下三个表:

products:
    product_id,
    product_name,
    ...

categories:
    category_id,
    category_name,
    category_parent_id,
    category_priority (for sort ordering),
    .....

labels:
    label_id,
    label_name,
    .....
Run Code Online (Sandbox Code Playgroud)

这个想法是,产品分配给一个类别将各内进行分组类别标签,并以这种方式在网站上列出:

---label1---
product_1
product_2
product_3
---label2---
product_4
product_5
---label3---
product_6
product_7
product_8
product_9
etc.
Run Code Online (Sandbox Code Playgroud)

我不知道如何设计一个关联表(或多个表)将所有这些粘合在一起并防止这样的异常:

---label1---
product_1
product_2
---label2---
product_2
product_3
Run Code Online (Sandbox Code Playgroud)

同时,我想允许一种情况,即当没有足够的产品来证明其合理性时,不会为某个类别分配标签

问题

是否有可能设计一个将它结合在一起的结构,或者我应该“放弃所有希望”并采用这样的方法:

categories:
    category_id,
    category_name,
    category_parent_id,
    categor_is_label,
    category_priority

products:
    product_id,
    product_name,
    ...
Run Code Online (Sandbox Code Playgroud)

加上下面的关联表:

categories_products:
    category_id,
    product_id,
    priority
Run Code Online (Sandbox Code Playgroud)

并处理应用程序中的所有逻辑和异常检查?

我假设用户不能直接访问数据库。

评论和聊天互动

对于那些有兴趣深入讨论手头业务背景的人,您可以访问此聊天室

mysql foreign-key database-design primary-key many-to-many

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

使用 JSON 数组更新 Postgres 表

我正在使用 Postgres 9.5,我想弄清楚如何使用 JSON 数组更新 postgres 表。我希望数组中的每个对象都对应一个新行,每个键对应一个列,每个值都是要插入到该列中的数据。我试图用一个函数来做到这一点。这里的数据格式:

[
    { col1: a, col2: 5, col3: 1, col4: one},
    { col1: b, col2: 6, col3: 2, col4: two},
    { col1: c, col2: 7, col3: 3, col4: three},
    { col1: d, col2: 8, col3: 4, col4: four},
]
Run Code Online (Sandbox Code Playgroud)

这是我的预期输出:

 col1   (varchar)| col2 (integer) |   col3 (integer)   |   col4 (varchar)
-----------------+----------------+--------------------+------------------
    a            |  5             |     1              |    one
    b            |  6             |     2              |    two
    c            |  7             |     3              |    three
    d            | …
Run Code Online (Sandbox Code Playgroud)

postgresql database-design stored-procedures

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

为什么维基百科使用 blob 类型而不是文本类型?

根据我的经验,当您想要保存图像或视频等二进制数据时,Blob 类型是不错的选择,当您想要保存大字符串时,Text 类型是不错的选择。

今天我看到了维基百科数据库。有趣的是,wiki 使用中等 blob 类型来存储页面的 wikitext。

在此处输入图片说明

所以我想知道为什么 Wiki 更喜欢使用 Blob 类型而不是 Text?

谢谢

mysql mariadb database-design

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

用于存储用户配置文件的可空列或 jsonb?

我决定使用可为空字段或 jsonb 来存储用户配置文件。最初,这将用于联系人:emailphone。我预计稍后可能会添加其他列,例如mobilewebsite。此外,可能还有其他不相关的字段,例如设置/首选项、保存的搜索等。

我已经决定我不想为此使用任何形式的键值存储(或任何涉及多对多关系的模式),除非有非常好的理由。

jsonb 的优点:

  • 如有必要,可以为每个“列”存储多个值
  • 添加新字段只需要 JS 编码和文档

jsonb 的缺点:

  • 将“列”名称存储为每个“行”的字符串的开销
  • Wonky 执行比较查询(我认为我的使用场景不适用)
  • 不得不期待意外

还有什么要添加到这个优点/缺点列表中的吗?尽管我只想使用可为空的列,但我认为忽略 jsonb 是一种疏忽 - 这似乎是一个令人信服的选择。

schema postgresql null database-design json

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

当两个 FK 列需要在同一个表中匹配自己时的参照完整性?

可能我的设计是错误的,或者只是有更好的方法。我将使用一个非常简单的例子:

    --------- dbo.Book----------
   |                            |
   |  BookID int identity (1,1) |
   |  ShelfID int FK            |--
    ----------------------------   |
                                   |
    --------- dbo.Row-----------   |    
   |                            |  |    
 --|  RowID int identity (1,1)  |  |    
|   ----------------------------   |    
|                                  |        
|   -------- dbo.Shelf----------   | 
|  |                            |  |
|  |  ShelfID int identity (1,1)|--
 --|  RowID int FK              |
    ----------------------------
Run Code Online (Sandbox Code Playgroud)

足够简单。

但是如果我想分配一个没有架子的行怎么办?也许我们还知道行而不是货架:

    --------- dbo.Book----------
   |                            |
   |  BookID int identity (1,1) |
   |  RowID int FK              | <-- New
   |  ShelfID int FK …
Run Code Online (Sandbox Code Playgroud)

foreign-key database-design sql-server referential-integrity

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

如何在此日志记录表上优化此查询?

我正在尝试为记录事件的表格优化表格布局。

日志表包含三个相关的列:Timestamp, ItemId, LocationId
每行表示在给定的timeitem已经在某个 看到了某个location

2017-01-01 10:00    Item A has been seen at location 1
2017-01-01 10:01    Item A has been seen at location 1
2017-01-01 11:00    Item B has been seen at location 1
2017-01-01 11:01    Item B has been seen at location 2
2017-01-01 11:02    Item A has been seen at location 2
2017-01-01 11:03    Item B has been seen at location 1
Run Code Online (Sandbox Code Playgroud)

大约有 100 个不同的位置、每天 20.000 个新项目、每天一百万个事件和 14 天的日志。 …

performance database-design sql-server sql-server-2012 denormalization

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

为什么我不能采用 RDBMS 数据库设计实践,并用于 NoSQL MongoDB 数据库设计?

假设我有一个 BankAccount 表和一个 BankAccountHistoryTransactions 表。

当涉及到 RDBMS 数据库模式设计时,大多数数据库设计人员会推荐以下内容:

BankAccount Table

int: BankAccountNumber Primary key

double: CashBalance

......

..
Run Code Online (Sandbox Code Playgroud)

此外,在 RDBMS 数据库设计中,BankAccountHistoryTransactions 表将类似于:

BankAccountHistoryTransactions Table

int: BankAccountHistoryTransactionsId Primary key

int: FK_BankAccountNumber Foreign key

DateTime2: DateOfTransaction

.................

.........
Run Code Online (Sandbox Code Playgroud)

在 NoSQL MongoDB 数据库模式中,它更像是一个包含嵌入式 BankAccountHistoryTransactions 集合的 BankAccount 集合:

db.BankAccount.find().pretty()
{
    "_id" : ObjectId("51f7be1cd6189a56c399d3bf"),
    "BankAccountNumber" : "7575785885859",
    "CashBalance" : "890399",
....................................,
...............................,
.......................,
    "BankAccountHistoryTransactions" : {
        "_id" : ObjectId("51f7be1cd6189a56c399d3bf"),
        "BankAccountHistoryTransactionsId": 1,
        "DateOfTransaction" : ISODate("2019-12-31T23:00:00Z")

}
}
Run Code Online (Sandbox Code Playgroud)

我对 NoSQL MongoDB 数据库架构设计方法的问题是银行账户可能有大量的 BankAccountHistoryTransactions 条目(可能进入银行账户的数十万个 BankAccountHistoryTransactions 条目)。

因此,如果我们使用如下所示的伪外键关系会不会更好: …

schema nosql rdbms mongodb database-design

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

解决教授和我自己关于解释 ERD 中鱼尾纹符号的争论

我正在大学介绍数据库对象课程。

我与教授在如何解释 ERD 图中基数的鱼尾纹符号方面存在分歧。

示例:看看这张图片(我从演讲幻灯片中提取的一张图片):

在此处输入图片说明

根据我的解释,这表明:

  • 供应商可能有 0 个或多个发货
  • 一批货物可能只属于一个供应商
  • 一个客户可能有 0 个或多个订单
  • 一个订单可能只属于一个客户

但是,根据我导师的解释,这表明:

  • 一个货件可能有 0 个或多个供应商
  • 一个供应商只能有一个发货
  • 一个客户可能只有一个订单
  • 一个订单可能有很多客户

我一直无法找到任何证据来证明我自己对此的理解……但是,再说一次,我只是一个学生。也许我错过了什么?如果我是,我想弄清楚我哪里出错了。

erd database-design

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

一旦表变大,我可以做些什么来提高未来的性能?

我创建了一个导入 600,000 行 Excel 工作表的表格。我将运行的大多数查询都将使用C_CustomerID,它们将如下例所示:

select * from testtable where C_CustomerID = 12345678
Run Code Online (Sandbox Code Playgroud)

表定义为:

CREATE TABLE [dbo].[testtable](
    [id_card] [int] IDENTITY(1,1) NOT NULL,
    [C_CustomerID] [int] NOT NULL,
    [C_AccountID] [nvarchar](255) NULL,
    [C_ProductID] [varchar](20) NULL,
    .......... more columns here ...     
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

我创建了一个索引:

CREATE NONCLUSTERED INDEX [inx_profitability] ON [dbo].[testtable]
(
    [C_CustomerID] ASC
)
Run Code Online (Sandbox Code Playgroud)

稍后我只会从 Excel 工作表导入更多记录。每 6 个月将导出约 500,000 条新记录。

一旦表变大,我可以做些什么来提高未来的性能?

我正在运行 SQL Server 2012 和 Microsoft SQL Server Management Studio 11.0.3128.0。

database-design sql-server index-tuning sql-server-2012

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