考虑一个餐厅数据库,其中有一张餐厅表(带有一些附加信息),并且对于该表中的每个餐厅(每一行),您都有一组包含信息的表(比如菜单等)。有这么多桌子(有数千家餐厅)可以吗,或者有没有更好的方法来设计这种关系?
为了更好的想象力: 
我有以下表格设计。
一个Event表,带有用于保存事件元数据的辅助表。
每个事件行具有事件类型柱(regular_event,recurring_route,timed_messages等。)
每个事件类型都有自己的表来定义有关事件的不同内容 - 包括用户。问题是它可能被多对多表 ( users_regular_events) 或第三个表或第四个表( )直接引用events -> recurring_routes -> recurring_routes_stations -> recurring_stations -> recurring_stations_users -> users。
创建一个users_events表来复制某些事件之间的关系是否有意义?因为,目前如果我想向每个用户展示他的事件,我将不得不加入多个表。也许我需要重新考虑我的整个设计?
假设您有一个员工数据库和一个包含每个员工开始日期的表。还有其他表格根据角色、资历和雇佣月份描述了他们的假期津贴。还有一个表格,其中包含每个员工使用的假期。
问题:
从性能以及代码和维护的简易性的一般平衡角度来看,通过评估所有表数据来计算员工的假期余额还是将可用假期存储在桶中更好,然后在休假时进行调整。
在我看来,计算可用假期的开销和复杂性,然后计算已占用的假期是不必要的,更有效和更优雅的解决方案是创建一个包含可用假期的表,并在开始时填充它年并在休假时递减它。
以下是 SQL 表的列:
Course_Code
Course_Name
Tutor_ID
Tutor_Name
Student_No
Student_Name
DateOfBirth
Gender
LastAttDate
Run Code Online (Sandbox Code Playgroud)
通过检查下面的所有 NF1 要求,我相信这张表是 NF1。
All data is atmoic
There is no grouping of columns.
Each column can be identified by a primary key. (Course_Code)
Run Code Online (Sandbox Code Playgroud)
但是在我得到这个问题的这个网站上,他们对表格进行了一些修改,使其成为 NF1。我相信这些修改是不必要的,表格已经在 NF1 中了。
我在这里错过了什么吗?
我想连续存储多个日期。每行都有一个唯一的id,每个对应的id可以有多个操作日期。每行的日期数可能不同。我有多个 ID,每个 ID 都有多个日期。
ID 日期1 日期2 日期3 ... ... ... 1 2018-05-19 2018-04-09 2018-08-09 2 2016-01-30 2017-05-04 2016-06-07 2020-05-17 2021-06-23 ... 3 2001-05-06 4 2018-11-05 2013-06-09
为给定存储多个日期的最佳方法是什么id?
我正在使用 MS SQL Server,但在一般数据库设计中,我想知道当数据库中的每一行都有其自动生成的代理键值时会出现什么问题。
我知道一些优点,比如主键不需要标识没有NULL的唯一列,不需要管理复合主键,范式更容易管理,唯一性有保证。
我想知道,是否有任何关于性能或索引结构等的充分理由应该使我们使用真实世界的事实键而不是代理键?
谢谢。
当我们向现有表中添加新列时,正确的方法是什么?
例如,我已经有像 Foo1、Foo2、Bar1、Bar2 这样的列。现在我想添加一个名为 Foo3 的新列。
当我想添加具有相似名称的列时,标准方法是什么(如果是这样的话)?
我看到 2 个选择:
为了获得一些参考,我们正在使用数据库项目来控制数据库更改,并为应用程序开发人员提供更好的 GUI 以进行数据库更改。我们使用某种 ORM 与数据库交互,因此没有人使用数据库对象名称查询数据库。
更新: 我在一些现有列上有几个索引。但是名称相似的列(包括我想添加的列)不属于任何索引。
我似乎无法找到答案的基本问题。我有一个数据库,用于存储收据中的行项目以及用户名和收据编号。
现在该lineItem列只是一长串由逗号分隔的数据(原始文件似乎只是一个 Excel 文件)。此信息在 PHP 脚本中解析,以便在前端查看。
该表如下所示:
|----------|----------|----------|
|lineItem |receiptID |customerID|
|----------|----------|----------|
|CD, DVD, |001 |User01 |
|----------|----------|----------|
|CD, CD, |002 |User02 |
|DVD, usb, | | |
|----------|----------|----------|
Run Code Online (Sandbox Code Playgroud)
最终,这是不好的做法吗?这些lineItem值是否应该链接到另一个表中的相关值?
我正在 SQL Server 上开发一个数据库项目,我在考虑使用列存储索引是否是一个好主意。
该项目由一个表 (A) 组成,该表将包含大量行,一列具有许多重复值。每天,一包新行将添加到表中,每个包都有一个“DateId”。
之后,我需要更新一个不同的表 (B) 加入 A 并过滤 A 以获取“DateId”和其他列。
SQL 中的示例:
CREATE TABLE A (
[Id] [BIGINT] IDENTITY(1,1) NOT NULL,
[DateId] [INT] NOT NULL,
[B_Id] [BIGINT] NOT NULL,
-- other columns...
INDEX cci_A CLUSTERED COLUMNSTORE
)
CREATE TABLE B (
[Id] [BIGINT] IDENTITY(1,1) NOT NULL,
-- other columns...
INDEX cci_B CLUSTERED COLUMNSTORE
)
UPDATE B
SET ...
FROM A
INNER JOIN B ON A.B_Id = B.Id
WHERE A.DateId = @myDateId
Run Code Online (Sandbox Code Playgroud)
在这种情况下,列存储是一个不错的选择吗?
我希望这个问题不会太主观以至于它已经结束,因为我认为它可以帮助新的 DBA,他们希望更好地全面了解如何成为一名有能力、知识渊博的 DBA,并且精通他们的行业。
谢谢你。
database-design ×10
sql-server ×4
mysql ×2
table ×2
codds-rules ×1
columnstore ×1
csv ×1
index ×1
performance ×1
primary-key ×1