首页 > 解决方案 > 两个表的 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
);

标签: sqlsql-serverdatabasedatatables

解决方案


如果要对表进行分区,则需要定义需要包含在主键中的分区键。例如(这不是正确的语法,只是一个伪代码):

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个建议给你:

  1. 不要仅对事实表分区主表(维度表)。
  2. 如果您使用分区,则不要使用外键。

推荐阅读