我想利用基于 a 的分区[TenantId](稍后与日期范围结合使用)。我不需要在 中手动插入最新值PARTITION FUNCTION,而是考虑创建一个TRIGGER AFTER INSERT来提取[TenantId]值并将ALTER PARTITION FUNCTION其添加到 中SPLIT RANGE。然而,我遇到了一个意想不到的错误:
无法对/使用表“租户”执行 ALTER PARTITION FUNCTION,因为该表是目标表或当前正在执行的触发器的级联操作的一部分。
首先,我创建PARTITION FUNCTION [PF_Tenant_Isolation]和PARTITION SCHEME [PS_Tenant_Isolation]以便在 上进行分区[TenantId]。
CREATE PARTITION FUNCTION [PF_Tenant_Isolation] ([int])
AS RANGE LEFT FOR VALUES (1);
GO
CREATE PARTITION SCHEME [PS_Tenant_Isolation]
AS PARTITION [PF_Tenant_Isolation]
ALL TO ([Auth]);
GO
Run Code Online (Sandbox Code Playgroud)
接下来,我将[Tenant]根据新创建的分区方案创建表。
IF OBJECT_ID('[Auth].[Tenant]', 'U') IS NULL
BEGIN
CREATE TABLE [Auth].[Tenant] (
[TenantId] [int] IDENTITY(1,1)
,[TenantActive] [bit] …Run Code Online (Sandbox Code Playgroud) 一个配置文件可以有多种配置文件类型。该配置文件可以有许多字段,这些字段都与查找表相关联。某些字段可以有多种选择。
\n\nprofile -> profile_date -> one relationship status, one zodiac, many languages, many countries traveled, many cuisines, many activities, ...\n\nprofile -> profile_network -> one company, one school, ...\n\nprofile -> ...\nRun Code Online (Sandbox Code Playgroud)\n\n字段的查找表如下所示:
\n\nid type\n1 \xe2\x99\x88 ARIES\n2 \xe2\x99\x89 TAURUS\n3 \xe2\x99\x8a GEMINI\n4 \xe2\x99\x8b CANCER\n5 \xe2\x99\x8c LEO\n6 \xe2\x99\x8d VIRGO\n7 \xe2\x99\x8e LIBRA\n8 \xe2\x99\x8f SCORPIO\n9 \xe2\x99\x90 SAGITTARIUS\n10 \xe2\x99\x91 CAPRICORN\n11 \xe2\x99\x92 AQUARIUS\n12 \xe2\x99\x93 PISCES\nRun Code Online (Sandbox Code Playgroud)\n\n如果该字段是单个选择,我们将加入查找表,然后就完成了。
\n\n-> profile_date (zodiac_type_id) -> zodiac_type.id\nRun Code Online (Sandbox Code Playgroud)\n\n如果字段是多项选择,则中间有一个用于多对多的联接表。
\n\n-> profile_date -> (profile_date_id) profile_date_languages (language_type_id) -> language_type.id\nRun Code Online (Sandbox Code Playgroud)\n\n … 考虑PostgreSQL上的这张表,但有数千条记录:
\n\n| id | uuid | color | ... | deleted_at |\n|----|---------|----------|-----|---------------------|\n| 1 | 4fc1... | red | ... | 2020-01-01 13:00:00 |\n| 2 | 4fc1... | gray | ... | 2020-01-01 13:00:00 |\n| 3 | 4fc1... | blue | ... | null |\n| 4 | 4fc1... | red | ... | null |\n| 5 | 4fc1... | blue | ... | 2019-12-03 00:45:00 |\nRun Code Online (Sandbox Code Playgroud)\n\n目的:
\n\nid(自动增量)用作主键和主要挂钩,以与其他表一起使用 JOIN。uuid是用于识别记录的面向公众的值。deleted_at(timestamp|null) …当然是一个noobish 问题,但我还是会问它。也许别人会感激。^^
我对 MySQL 越来越熟悉,并且我试图理解创建结构良好的数据库的概念。目前我正在阅读实体关系图(ERD),我问自己:
如果我有三个由第四个链接的表格,例如: 由一个或多个作者撰写的一本书,并且每个作者都在一个或多个国家出版。
authors books countries
id | name id | book id | publishedInCountry
1 | ... 1 | ... 1 | ...
1 | ... 2 | ... 2 | ...
1 | ... 2 | ... 3 | ...
4 | ... 1 | ... 3 | ...
linkTable
idOfAuthor | idOfBook | idOfCountry
1 | 1 | 1
...
Run Code Online (Sandbox Code Playgroud)
这些 ERD 会是什么样子?
附加信息
我想到了:
[authors]-- < 是 > 的作者 -- [books] …
我无论如何都不是数据库设计师。我是一名桌面程序员,但我目前正在考虑实现一个需要(可能非常大的)后端数据库的网站创意。
在我的站点中,我将拥有可以创建和加入“组”的用户。用户的数量可能会更多,组的数量也可能更多,并且如果用户愿意,显然可以在多个组中。
我正在努力解决如何在数据库端正确定义它。
我可以创建一个包含所有组信息的“组”表,然后是另一个将每个用户与组相关联的表(因此该表中的每一行都有一个用户 ID,然后是一个组 ID,用户 ID 可以出现在多个行,因为用户可能在多个组中)。对于大量用户,这样的表会变得相当大,尤其是当用户涉及多个组时。
我的一个朋友建议为每个组准备一张单独的桌子。因此,每次用户创建组时,我们都会在数据库中创建一个表,然后用该组中每个用户的用户 ID 填充该表。我对此不太确定,因为为每个组创建一个新表似乎会带来很多开销。
此外,从桌面程序员的角度来看,我真的只想创建一个名为“Group”的类并为其提供一个用户 ID 数组……但显然我不能在关系数据库世界中做到这一点。
那么,我能做什么?设计这个的最佳方法是什么?什么将在服务器上最有效地运行?帮助启发想要学习一点数据库设计的程序员。:-)
谢谢!
我已经厌倦了向我们研发团队中的每个初级开发人员解释为什么他应该使用主键以及如何使用。所以我决定写一个小白皮书,每个新开发人员都应该阅读。这是它的草稿。
免责声明:
问题是- 我还应该在文档中添加什么?可能是——我应该改些什么呢?更详细的解释是什么?
草稿来了:
此外,即使使用具有(我希望)扁平分布的 SSN 或 ID Number,因为 PK 也不能解决 PK 的页面拆分问题,因为这些数字没有任何组织顺序。
在我的项目中,我有一张客户表,每个客户对每种产品都有自己的特价,这是一家小型企业,目前大约有 5 种产品。经理说以后可能会有更多的产品,但业务不会超过30个产品。对我来说,不创建特殊产品表而是向客户表添加列(每个新产品 - 新列)更容易。
人们建议我不要这样做,但我没有得到解释为什么仍然无法理解为什么在这种情况下产品的价格没有关系(每个客户都有自己的特价)在产品表中添加行比添加列更好产品到客户表?我能想到的唯一好处是只有 5 个产品的客户不必“携带”20 个可为空的产品(节省服务器空间)?
任何帮助将不胜感激
我必须创建一个表。它的大小将会非常快速地增加。
如果在此处提到的同一时刻触发许多插入查询,是否会有任何问题 -用户名的用户自动增量 ID
我想使用密钥,以便在值达到最大可能值后生成值为 1 的下一个密钥。如何实现?旧数据没有用,所以我可以删除起始行的数据。我知道 UNSIGNED BIGINT 的范围很大,但是有什么方法可以使用触发器创建数据库,以便键重用旧值?尝试编写用户定义的函数来实现这一点有什么缺点?
我正在寻找实现以下目标的数据库:
我更喜欢开源解决方案,但也愿意考虑专有解决方案。
database-design database-recommendation scalability relational-theory
“组”是一群学生。“话题”是课程的话题。
每个组对应一个主题。(因此每个主题可能有多个组。)
一个学生对应多个组,但每个主题最多一个组。
如何根据 MySQL 中的 UNIQUE 索引和外键实现这一点?
database-design ×10
sql-server ×3
postgresql ×2
primary-key ×2
erd ×1
foreign-key ×1
index-tuning ×1
join ×1
mysql ×1
partitioning ×1
scalability ×1
uuid ×1