sql - 两个表的 SQL Server 外键分区
问题描述
我是数据库新手,我不明白分区是如何工作的。我试图理解一些例子,但我还是迷路了。我只需要Persona
根据我对表进行分区idUbicacion
,对于每个不同的外键我都需要分区。我很感谢你的帮助。:)
CREATE TABLE Ubicacion
(
numero int identity(1,1) primary key NOT NULL,
pais varchar(200) NOT NULL
provincia varchar(200) NOT NULL,
);
CREATE TABLE Persona
(
id int identity(1,1) primary key NOT NULL,
nombre varchar(500),
cedula int,
nacionalidad varchar(200),
idUbicacion int foreign key references Ubicacion(id) NOT NULL
);
解决方案
如果要对表进行分区,则需要定义需要包含在主键中的分区键。例如(这不是正确的语法,只是一个伪代码):
CREATE TABLE Ubicacion(
numero int identity(1,1) NOT NULL,
pais varchar(200) NOT NULL,
provincia varchar(200) NOT NULL,
primary key (numero, provincia)
) PARTITION BY provincia;
然后,如果可能,您需要将此额外字段添加到所有外键中:
CREATE TABLE Persona(
id int identity(1,1) primary key NOT NULL,
nombre varchar(500),
cedula int,
nacionalidad varchar(200),
provincia varchar(200) NOT NULL,
idUbicacion int NOT NULL,
foreign key (idUbicacion, provincia) references Ubicacion(id, provincia)
);
不容易吧?所以我有2个建议给你:
- 不要仅对事实表分区主表(维度表)。
- 如果您使用分区,则不要使用外键。
推荐阅读
- javascript - JXA:第二次及更多次运行后“无法创建重复变量”
- apache-spark - Pyspark jdbc 从 IBM DB2 读取数据错误 ERRORCODE=-4499, SQLSTATE=08001
- python - 使用 Google Colab 将图像加载到 numpy 数组时出现问题
- sed - 如何使用 sed 解析带有制表符缩进选项的配置文件?
- arrays - 输出数组的最后一个数字 - C 中的动态内存分配
- java - 无法在字节好友拦截器中获取方法
- python - 为什么 sqlalchemy 结果 dict 忽略 text() 列?
- mule - 在 mule 4 中将带有 CDATA 的 SOAP 响应转换为 JSON
- ios - 抛出函数的无效转换。使用解码器类时
- php - 我应该增加 PHP memory_limit 以匹配我的 VM memory_limit 吗?