Не удалось создать ограничение или индекс см описание предыдущих ошибок

В таблице, на которую имеются ссылки, отсутствуют первичные или потенциальные ключи, соответствующие списку

30.11.2018, 17:21. Показов 4649. Ответов 2


Студворк — интернет-сервис помощи студентам

Здравствуйте! Только начинаю изучать БД, возникли проблемы при создании следующего запроса:

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
CREATE TABLE logistics.dbo.Production
(
    ProdID SMALLINT PRIMARY KEY IDENTITY(0, 1),
    ProdName NVARCHAR(64) NOT NULL DEFAULT('Undefined'),
    ProdCost SMALLMONEY NOT NULL CHECK(ProdCost >= 0),
    ProdWeight TINYINT NOT NULL CHECK(ProdWeight >= 0)
);
 
CREATE TABLE logistics.dbo.Warehouse
(
    WarehouseID TINYINT NOT NULL,
    ProdID SMALLINT NOT NULL
        FOREIGN KEY REFERENCES Production(ProdID) ON DELETE NO ACTION ON UPDATE CASCADE,
    Amount INT NOT NULL CHECK(Amount >= 0),
    DischargeDate DATE NULL,
    PRIMARY KEY(WarehouseID, ProdID)
);
 
CREATE TABLE logistics.dbo.TradePoint
(
    OrderID INT PRIMARY KEY IDENTITY(0, 1),
    ProdID SMALLINT NOT NULL,
        --FOREIGN KEY REFERENCES Warehouse(ProdID) ON DELETE NO ACTION ON UPDATE CASCADE,
    AmountOfProd INT NOT NULL CHECK(AmountOfProd > 0),
    DeliveryAddress NVARCHAR(64) NOT NULL,
    DeliveryDate DATETIME NOT NULL,
    WarehouseID TINYINT NOT NULL,
        --FOREIGN KEY REFERENCES Warehouse(WarehouseID) ON DELETE NO ACTION ON UPDATE CASCADE,
    FOREIGN KEY (ProdID, WarehouseID) REFERENCES Warehouse(ProdID, WarehouseID)
);

Выдает следующее:

Сообщение 1776, уровень 16, состояние 0, строка 19
В таблице «Warehouse», на которую имеются ссылки, отсутствуют первичные или потенциальные ключи, соответствующие списку ссылающихся столбцов во внешнем ключе «FK__TradePoint__06CD04F7».
Сообщение 1750, уровень 16, состояние 1, строка 19
Не удалось создать ограничение или индекс. См. описание предыдущих ошибок.

Пытался найти решение сам, вроде бы проблема в том, что происходит ссылка на часть составного первичного ключа, но я ссылаюсь на все поля первичного ключа таблицы Warehouse. Подскажите, пожалуйста, в чем проблема?(



0



В таблице, на которую имеются ссылки, отсутствуют первичные или потенциальные ключи, соответствующие списку

30.11.2018, 17:21. Показов 4179. Ответов 2


Здравствуйте! Только начинаю изучать БД, возникли проблемы при создании следующего запроса:

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
CREATE TABLE logistics.dbo.Production
(
    ProdID SMALLINT PRIMARY KEY IDENTITY(0, 1),
    ProdName NVARCHAR(64) NOT NULL DEFAULT('Undefined'),
    ProdCost SMALLMONEY NOT NULL CHECK(ProdCost >= 0),
    ProdWeight TINYINT NOT NULL CHECK(ProdWeight >= 0)
);
 
CREATE TABLE logistics.dbo.Warehouse
(
    WarehouseID TINYINT NOT NULL,
    ProdID SMALLINT NOT NULL
        FOREIGN KEY REFERENCES Production(ProdID) ON DELETE NO ACTION ON UPDATE CASCADE,
    Amount INT NOT NULL CHECK(Amount >= 0),
    DischargeDate DATE NULL,
    PRIMARY KEY(WarehouseID, ProdID)
);
 
CREATE TABLE logistics.dbo.TradePoint
(
    OrderID INT PRIMARY KEY IDENTITY(0, 1),
    ProdID SMALLINT NOT NULL,
        --FOREIGN KEY REFERENCES Warehouse(ProdID) ON DELETE NO ACTION ON UPDATE CASCADE,
    AmountOfProd INT NOT NULL CHECK(AmountOfProd > 0),
    DeliveryAddress NVARCHAR(64) NOT NULL,
    DeliveryDate DATETIME NOT NULL,
    WarehouseID TINYINT NOT NULL,
        --FOREIGN KEY REFERENCES Warehouse(WarehouseID) ON DELETE NO ACTION ON UPDATE CASCADE,
    FOREIGN KEY (ProdID, WarehouseID) REFERENCES Warehouse(ProdID, WarehouseID)
);

Выдает следующее:

Сообщение 1776, уровень 16, состояние 0, строка 19
В таблице «Warehouse», на которую имеются ссылки, отсутствуют первичные или потенциальные ключи, соответствующие списку ссылающихся столбцов во внешнем ключе «FK__TradePoint__06CD04F7».
Сообщение 1750, уровень 16, состояние 1, строка 19
Не удалось создать ограничение или индекс. См. описание предыдущих ошибок.

Пытался найти решение сам, вроде бы проблема в том, что происходит ссылка на часть составного первичного ключа, но я ссылаюсь на все поля первичного ключа таблицы Warehouse. Подскажите, пожалуйста, в чем проблема?(

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

Кто-нибудь может мне понять, почему я получаю эту ошибку и определить мою ошибку здесь?

Я прочитал сообщение об ошибке, но не могу определить различные типы данных? Чего мне не хватает?

CREATE TABLE STAFF (
    StaffLastname NVARCHAR(100) NOT NULL,     
    StaffFirstName  NVARCHAR(100) NOT NULL, 
    StaffID NVARCHAR(100) NOT NULL,
    PRIMARY KEY (StaffID)   
);

CREATE TABLE WAREHOUSE(
    WarehouseLocation NVARCHAR(100) NOT NULL,
    PRIMARY KEY (WarehouseLocation) 
);

CREATE TABLE CUSTOMER (
    CustomerID NVARCHAR(50),        
    CustomerName  NVARCHAR(100) NOT NULL,
    CustomerAddress NVARCHAR(100) NOT NULL,
    CustomerCity  NVARCHAR(100) NOT NULL,
    PRIMARY KEY (CustomerID)    
);

CREATE TABLE COURSE (
    CourseID    NVARCHAR(25),
    CourseName  NVARCHAR(100) NOT NULL,
    PRIMARY KEY (CourseID)  
);

CREATE TABLE COURSE_OFFERING (
    WarehouseLocation NVARCHAR(100) NOT NULL,
    CourseID NVARCHAR(25) NOT NULL,
    CourseDate DATE CHECK (LEN(CourseDate) = 8),
    PRIMARY KEY (WarehouseLocation,CourseID,CourseDate), 
    FOREIGN KEY (CourseID) REFERENCES COURSE,
    FOREIGN KEY (WarehouseLocation) REFERENCES WAREHOUSE
);

CREATE TABLE  BOOKING (
    CustomerID NVARCHAR(50) NOT NULL,   
    WarehouseLocation NVARCHAR(100) NOT NULL,   
    CourseID NVARCHAR(25) NOT NULL, 
    CourseDate DATE CHECK (LEN(CourseDate) = 8),
    BookingDate DATE CHECK (LEN(BookingDate) = 8),
    PaymentAmount MONEY CHECK (PaymentAmount > 0) NOT NULL, 
    Review NVARCHAR(100) NULL,    
    PRIMARY KEY (CustomerID, WarehouseLocation, CourseID, CourseDate),  
    FOREIGN KEY (WarehouseLocation, CourseID, CourseDate) REFERENCES COURSE_OFFERING,
    FOREIGN KEY (CustomerID) REFERENCES CUSTOMER
);

CREATE TABLE STAFF_ALLOCATION (
    StaffID NVARCHAR(100) NOT NULL,
    CourseDate DATE CHECK (LEN(CourseDate) = 8),
    WarehouseLocation NVARCHAR(100) NOT NULL,
    CourseID NVARCHAR(25) NOT NULL,
    PRIMARY KEY (StaffID, CourseDate, CourseID, WarehouseLocation),
    FOREIGN KEY (StaffID) REFERENCES STAFF,
    FOREIGN KEY (CourseDate, WarehouseLocation, CourseID) REFERENCES COURSE_OFFERING
);

ERROR MSG - - -- - - - - - - - - - -

(Затронута 1 строка) Сообщение 1778, уровень 16, состояние 0, строка 65 Столбец «COURSE_OFFERING.WarehouseLocation» не имеет того же типа данных, что и столбец ссылки «STAFF_ALLOCATION.CourseDate» во внешнем ключе «FK__STAFF_ALLOCATION__5D60DB10».

Сообщение 1750, уровень 16, состояние 1, строка 65 Не удалось создать ограничение или индекс. Смотрите предыдущие ошибки.

This is the ERD i have

2 ответа

Лучший ответ

В вашей последней таблице у вас есть внешний ключ, который имеет 3 столбца с таким порядком типов данных: DATE, NVARCHAR, NVARCHAR

И они ссылаются на таблицу, которая имеет 3 столбца с таким порядком типов данных:

NVARCHAR, NVARCHAR, ДАТА

Если вы измените свою последнюю таблицу на это:

CREATE TABLE STAFF_ALLOCATION (
StaffID NVARCHAR(100) NOT NULL,
CourseDate DATE CHECK (LEN(CourseDate) = 8),
WarehouseLocation NVARCHAR(100) NOT NULL,
CourseID NVARCHAR(25) NOT NULL,
PRIMARY KEY (StaffID, CourseDate, CourseID, WarehouseLocation),
FOREIGN KEY (StaffID) REFERENCES STAFF,
FOREIGN KEY (WarehouseLocation, CourseID, CourseDate) REFERENCES COURSE_OFFERING

Все будет хорошо, как в этой демонстрации


1

VBoka
15 Июл 2020 в 05:22

Настройте порядок столбцов в ПЕРВИЧНОМ КЛЮЧЕ в таблице ПРЕДЛОЖЕНИЕ КУРСА со столбцами в КЛЮЧЕВОМ КЛЮЧЕ в таблице STAFF_ALLOCATION. потому что раньше WarehouseLocation, CourseID, CourseDate = NVARCHAR, NVARCHAR, DATE при предложении курса CourseDate, WarehouseLocation, CourseID = DATE, NVARCHAR, NVARCHAR

CREATE TABLE COURSE_OFFERING (
    WarehouseLocation NVARCHAR(100) NOT NULL,
    CourseID NVARCHAR(25) NOT NULL,
    CourseDate DATE CHECK (LEN(CourseDate) = 8),
    PRIMARY KEY (WarehouseLocation,CourseID,CourseDate)
);

CREATE TABLE STAFF_ALLOCATION (
    StaffID NVARCHAR(100) NOT NULL,
    CourseDate DATE CHECK (LEN(CourseDate) = 8),
    WarehouseLocation NVARCHAR(100) NOT NULL,
    CourseID NVARCHAR(25) NOT NULL,
    PRIMARY KEY (StaffID, CourseDate, CourseID, WarehouseLocation),
    FOREIGN KEY (WarehouseLocation,CourseID,CourseDate) REFERENCES COURSE_OFFERING
);


0

Agung Panduan
15 Июл 2020 в 09:08

Additional info: If the table that will be referenced by a table of migration already exists, then sequelize create foreign key successfuly, but if the table that will be referenced by a table created in migration before, then it not works.

What you are doing?

'use strict';

module.exports = {
  up: async (queryInterface, Sequelize) => {
    return await queryInterface.createTable(
      'Comprovante',
      {
        IdComprovante: {
          type: Sequelize.INTEGER,
          primaryKey: true,
          autoIncrement: true,
        },
        Descricao: {
          type: Sequelize.STRING,
          allowNull: false,
        },
        Valor: {
          type: Sequelize.DECIMAL(10, 2),
          allowNull: false,
          comment:
            'O valor do documento ou da parte do documento que ' +
            'servirá de comprovação',
        },
        AtualizadoEm: {
          type: Sequelize.DATE,
          allowNull: true,
        },
        CriadoEm: {
          type: Sequelize.DATE,
          allowNull: false,
          defaultValue: Sequelize.NOW,
          comment:
            'Este campo é importante para indicar a data que vai ' +
            'ter início para computar o auxílio',
        },
        DboIdDocumento: {
          type: Sequelize.INTEGER,
          comment: 'Referência ao documento digitalizado',
        },
      },
      { schema: 'auxilio_saude_v2' },
    );
  },

  down: async (queryInterface, Sequelize) => {
    return await queryInterface.dropTable('Comprovante');
  },
};
'use strict';

module.exports = {
  up: async (queryInterface, Sequelize) => {
    return await queryInterface.createTable(
      'Ressarcimento',
      {
        IdRessarcimento: {
          type: Sequelize.INTEGER,
          primaryKey: true,
          autoIncrement: true,
        },
        Tipo: {
          type: Sequelize.ENUM('recorrente', 'nao-recorrente'),
          allowNull: false,
        },
        Descricao: {
          type: Sequelize.STRING,
          allowNull: false,
        },
        MesCompetencia: {
          type: Sequelize.INTEGER,
          allowNull: false,
          comment: 'A partir de/Em qual mês o ressarcimento valerá',
        },
        AnoCompetencia: {
          type: Sequelize.INTEGER,
          allowNull: false,
          comment: 'A partir de/Em qual ano o o ressarcimento valerá',
        },
        Valor: {
          type: Sequelize.DECIMAL(10, 2),
          allowNull: false,
          comment:
            'A atualização em valor gerará um novo ressarcimento ' +
            '(se ele for recorrente)',
        },
        Ativo: {
          type: Sequelize.BOOLEAN,
          allowNull: false,
        },
        MotivoNaoAtivo: {
          type: Sequelize.STRING,
          allowNull: true,
        },
        AtualizadoEm: {
          type: Sequelize.DATE,
          allowNull: true,
        },
        CriadoEm: {
          type: Sequelize.DATE,
          allowNull: false,
          defaultValue: Sequelize.NOW,
          comment:
            'Este campo é importante para indicar a data que vai ' +
            'ter início para computar o auxílio',
        },

        /** Foreign keys */
        IdComprovante: {
          type: Sequelize.INTEGER,
          references: {
            model: 'Comprovante',
            key: 'IdComprovante',
            schema: 'auxilio_saude_v2',
          },
        },
        DboIdVinculo: {
          type: Sequelize.INTEGER,
          references: {
            model: 'Vinculo',
            key: 'IdVinculo',
            schema: 'dbo',
          },
        },
      },
      { schema: 'auxilio_saude_v2' },
    );
  },

  down: async (queryInterface, Sequelize) => {
    return await queryInterface.dropTable('Ressarcimento');
  },
};

What do you expect to happen?

To create a foreign key in Ressarcimento.IdComprovante. If i comment

references: {
            model: 'Comprovante',
            key: 'IdComprovante',
            schema: 'auxilio_saude_v2',
          },

then, it works.

What is actually happening?

== 20181205154655-CreateAuxilioSaudeSchema: migrating =======
== 20181205154655-CreateAuxilioSaudeSchema: migrated (0.031s)

== 20181205154700-CreateAuxilioSaudeComprovanteTable: migrating =======
== 20181205154700-CreateAuxilioSaudeComprovanteTable: migrated (0.037s)

== 20181205155631-CreateAuxilioSaudeRessarcimentoTable: migrating =======

ERROR: Could not create constraint or index. See previous errors.

Dialect: MSSQL
Sequelize CLI version: latest
Sequelize version: latest

Additional info: If the table that will be referenced by a table of migration already exists, then sequelize create foreign key successfuly, but if the table that will be referenced by a table created in migration before, then it not works.

What you are doing?

'use strict';

module.exports = {
  up: async (queryInterface, Sequelize) => {
    return await queryInterface.createTable(
      'Comprovante',
      {
        IdComprovante: {
          type: Sequelize.INTEGER,
          primaryKey: true,
          autoIncrement: true,
        },
        Descricao: {
          type: Sequelize.STRING,
          allowNull: false,
        },
        Valor: {
          type: Sequelize.DECIMAL(10, 2),
          allowNull: false,
          comment:
            'O valor do documento ou da parte do documento que ' +
            'servirá de comprovação',
        },
        AtualizadoEm: {
          type: Sequelize.DATE,
          allowNull: true,
        },
        CriadoEm: {
          type: Sequelize.DATE,
          allowNull: false,
          defaultValue: Sequelize.NOW,
          comment:
            'Este campo é importante para indicar a data que vai ' +
            'ter início para computar o auxílio',
        },
        DboIdDocumento: {
          type: Sequelize.INTEGER,
          comment: 'Referência ao documento digitalizado',
        },
      },
      { schema: 'auxilio_saude_v2' },
    );
  },

  down: async (queryInterface, Sequelize) => {
    return await queryInterface.dropTable('Comprovante');
  },
};
'use strict';

module.exports = {
  up: async (queryInterface, Sequelize) => {
    return await queryInterface.createTable(
      'Ressarcimento',
      {
        IdRessarcimento: {
          type: Sequelize.INTEGER,
          primaryKey: true,
          autoIncrement: true,
        },
        Tipo: {
          type: Sequelize.ENUM('recorrente', 'nao-recorrente'),
          allowNull: false,
        },
        Descricao: {
          type: Sequelize.STRING,
          allowNull: false,
        },
        MesCompetencia: {
          type: Sequelize.INTEGER,
          allowNull: false,
          comment: 'A partir de/Em qual mês o ressarcimento valerá',
        },
        AnoCompetencia: {
          type: Sequelize.INTEGER,
          allowNull: false,
          comment: 'A partir de/Em qual ano o o ressarcimento valerá',
        },
        Valor: {
          type: Sequelize.DECIMAL(10, 2),
          allowNull: false,
          comment:
            'A atualização em valor gerará um novo ressarcimento ' +
            '(se ele for recorrente)',
        },
        Ativo: {
          type: Sequelize.BOOLEAN,
          allowNull: false,
        },
        MotivoNaoAtivo: {
          type: Sequelize.STRING,
          allowNull: true,
        },
        AtualizadoEm: {
          type: Sequelize.DATE,
          allowNull: true,
        },
        CriadoEm: {
          type: Sequelize.DATE,
          allowNull: false,
          defaultValue: Sequelize.NOW,
          comment:
            'Este campo é importante para indicar a data que vai ' +
            'ter início para computar o auxílio',
        },

        /** Foreign keys */
        IdComprovante: {
          type: Sequelize.INTEGER,
          references: {
            model: 'Comprovante',
            key: 'IdComprovante',
            schema: 'auxilio_saude_v2',
          },
        },
        DboIdVinculo: {
          type: Sequelize.INTEGER,
          references: {
            model: 'Vinculo',
            key: 'IdVinculo',
            schema: 'dbo',
          },
        },
      },
      { schema: 'auxilio_saude_v2' },
    );
  },

  down: async (queryInterface, Sequelize) => {
    return await queryInterface.dropTable('Ressarcimento');
  },
};

What do you expect to happen?

To create a foreign key in Ressarcimento.IdComprovante. If i comment

references: {
            model: 'Comprovante',
            key: 'IdComprovante',
            schema: 'auxilio_saude_v2',
          },

then, it works.

What is actually happening?

== 20181205154655-CreateAuxilioSaudeSchema: migrating =======
== 20181205154655-CreateAuxilioSaudeSchema: migrated (0.031s)

== 20181205154700-CreateAuxilioSaudeComprovanteTable: migrating =======
== 20181205154700-CreateAuxilioSaudeComprovanteTable: migrated (0.037s)

== 20181205155631-CreateAuxilioSaudeRessarcimentoTable: migrating =======

ERROR: Could not create constraint or index. See previous errors.

Dialect: MSSQL
Sequelize CLI version: latest
Sequelize version: latest

I’m trying to create a table with 3 columns. The first column should be an identity column named DescriptionsID, the second column should be a foreign key column named ProductID, and the third column should be an xml column named Description. But, I’m receiving an error:

Foreign Key ‘FK_ProductDescriptions_bacb18ce3aa67348e55d’ references invalid table ‘Product’ and «Could not create constraint or index. See previous errors.»

This is what I got:

CREATE TABLE ProductDescriptions (DescriptionsID int PRIMARY KEY NOT NULL,

ProductID varchar(25) NOT NULL,

FOREIGN KEY (ProductID) REFERENCES Product(ProductID),

Description text NULL) ;

References Product(ProductID) has the error/red underlining

asked Nov 26, 2018 at 1:28

Ryan's user avatar

2

When you create a Referential Constraint, You Need to make sure that the Table and the Column which you are referring already exists in the Database.

Also, the Datatype of Both Referring Column and the Referred Column Should Be the Same

Column 'Product.ProductId' is not the same data type as referencing column
'ProductDescriptions.ProductID' in the foreign key

So Create Product Table First, and set the Product Id as Primary Key

CREATE TABLE Product
(
    ProductId INT IDENTITY(1,1) PRIMARY KEY,
    ProductName VARCHAR(50)
)

CREATE TABLE ProductDescriptions 
(
    DescriptionsID int PRIMARY KEY NOT NULL,
    ProductID INT NOT NULL 
    ,FOREIGN KEY (ProductID) REFERENCES Product(ProductID),
    [Description] text NULL
) ;

answered Nov 26, 2018 at 5:46

Jayasurya Satheesh's user avatar

I’m trying to create a table with 3 columns. The first column should be an identity column named DescriptionsID, the second column should be a foreign key column named ProductID, and the third column should be an xml column named Description. But, I’m receiving an error:

Foreign Key ‘FK_ProductDescriptions_bacb18ce3aa67348e55d’ references invalid table ‘Product’ and «Could not create constraint or index. See previous errors.»

This is what I got:

CREATE TABLE ProductDescriptions (DescriptionsID int PRIMARY KEY NOT NULL,

ProductID varchar(25) NOT NULL,

FOREIGN KEY (ProductID) REFERENCES Product(ProductID),

Description text NULL) ;

References Product(ProductID) has the error/red underlining

asked Nov 26, 2018 at 1:28

Ryan's user avatar

2

When you create a Referential Constraint, You Need to make sure that the Table and the Column which you are referring already exists in the Database.

Also, the Datatype of Both Referring Column and the Referred Column Should Be the Same

Column 'Product.ProductId' is not the same data type as referencing column
'ProductDescriptions.ProductID' in the foreign key

So Create Product Table First, and set the Product Id as Primary Key

CREATE TABLE Product
(
    ProductId INT IDENTITY(1,1) PRIMARY KEY,
    ProductName VARCHAR(50)
)

CREATE TABLE ProductDescriptions 
(
    DescriptionsID int PRIMARY KEY NOT NULL,
    ProductID INT NOT NULL 
    ,FOREIGN KEY (ProductID) REFERENCES Product(ProductID),
    [Description] text NULL
) ;

answered Nov 26, 2018 at 5:46

Jayasurya Satheesh's user avatar

SQL Server 2017 on Windows SQL Server 2017 Developer SQL Server 2017 Enterprise SQL Server 2017 Enterprise Core Еще…Меньше

Проблемы

Предположим, что у вас есть двоичная база данных параметров сортировки в SQL Server 2017. При создании узла или краевой таблицы могут появляться следующие сообщения об ошибках:

Сообщение 1921, уровень 16, состояние 1, строка LineNumber
Указана недопустимая файловая группа «PRIMARY.».
Сообщение 1750, уровень 16, состояние 1, строка LineNumber
Не удалось создать ограничение или индекс. Просмотреть предыдущие ошибки.

Примечание. При создании узла или краевой таблицы с помощью _id $node или $edge _id таблица может быть создана успешно.

Решение

Эта проблема устранена в следующем накопительном обновлении SQL Server:

       Накопительное обновление 5 для SQL Server 2017

Все новые накопительные обновления для SQL Server содержат все исправления и все исправления для системы безопасности, которые были включены в предыдущий накопительный пакет обновления. Ознакомьтесь с самыми последними накопительными обновлениями для SQL Server.

Последнее накопительное обновление для SQL Server 2017

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе «Применяется к».

Ссылки

Ознакомьтесь с терминологией, которую корпорация Майкрософт использует для описания обновлений программного обеспечения.

Нужна дополнительная помощь?

Кто-нибудь может мне понять, почему я получаю эту ошибку и определить мою ошибку здесь?

Я прочитал сообщение об ошибке, но не могу определить различные типы данных? Чего мне не хватает?

CREATE TABLE STAFF (
    StaffLastname NVARCHAR(100) NOT NULL,     
    StaffFirstName  NVARCHAR(100) NOT NULL, 
    StaffID NVARCHAR(100) NOT NULL,
    PRIMARY KEY (StaffID)   
);

CREATE TABLE WAREHOUSE(
    WarehouseLocation NVARCHAR(100) NOT NULL,
    PRIMARY KEY (WarehouseLocation) 
);

CREATE TABLE CUSTOMER (
    CustomerID NVARCHAR(50),        
    CustomerName  NVARCHAR(100) NOT NULL,
    CustomerAddress NVARCHAR(100) NOT NULL,
    CustomerCity  NVARCHAR(100) NOT NULL,
    PRIMARY KEY (CustomerID)    
);

CREATE TABLE COURSE (
    CourseID    NVARCHAR(25),
    CourseName  NVARCHAR(100) NOT NULL,
    PRIMARY KEY (CourseID)  
);

CREATE TABLE COURSE_OFFERING (
    WarehouseLocation NVARCHAR(100) NOT NULL,
    CourseID NVARCHAR(25) NOT NULL,
    CourseDate DATE CHECK (LEN(CourseDate) = 8),
    PRIMARY KEY (WarehouseLocation,CourseID,CourseDate), 
    FOREIGN KEY (CourseID) REFERENCES COURSE,
    FOREIGN KEY (WarehouseLocation) REFERENCES WAREHOUSE
);

CREATE TABLE  BOOKING (
    CustomerID NVARCHAR(50) NOT NULL,   
    WarehouseLocation NVARCHAR(100) NOT NULL,   
    CourseID NVARCHAR(25) NOT NULL, 
    CourseDate DATE CHECK (LEN(CourseDate) = 8),
    BookingDate DATE CHECK (LEN(BookingDate) = 8),
    PaymentAmount MONEY CHECK (PaymentAmount > 0) NOT NULL, 
    Review NVARCHAR(100) NULL,    
    PRIMARY KEY (CustomerID, WarehouseLocation, CourseID, CourseDate),  
    FOREIGN KEY (WarehouseLocation, CourseID, CourseDate) REFERENCES COURSE_OFFERING,
    FOREIGN KEY (CustomerID) REFERENCES CUSTOMER
);

CREATE TABLE STAFF_ALLOCATION (
    StaffID NVARCHAR(100) NOT NULL,
    CourseDate DATE CHECK (LEN(CourseDate) = 8),
    WarehouseLocation NVARCHAR(100) NOT NULL,
    CourseID NVARCHAR(25) NOT NULL,
    PRIMARY KEY (StaffID, CourseDate, CourseID, WarehouseLocation),
    FOREIGN KEY (StaffID) REFERENCES STAFF,
    FOREIGN KEY (CourseDate, WarehouseLocation, CourseID) REFERENCES COURSE_OFFERING
);

ERROR MSG - - -- - - - - - - - - - -

(Затронута 1 строка) Сообщение 1778, уровень 16, состояние 0, строка 65 Столбец «COURSE_OFFERING.WarehouseLocation» не имеет того же типа данных, что и столбец ссылки «STAFF_ALLOCATION.CourseDate» во внешнем ключе «FK__STAFF_ALLOCATION__5D60DB10».

Сообщение 1750, уровень 16, состояние 1, строка 65 Не удалось создать ограничение или индекс. Смотрите предыдущие ошибки.

This is the ERD i have

2 ответа

Лучший ответ

В вашей последней таблице у вас есть внешний ключ, который имеет 3 столбца с таким порядком типов данных: DATE, NVARCHAR, NVARCHAR

И они ссылаются на таблицу, которая имеет 3 столбца с таким порядком типов данных:

NVARCHAR, NVARCHAR, ДАТА

Если вы измените свою последнюю таблицу на это:

CREATE TABLE STAFF_ALLOCATION (
StaffID NVARCHAR(100) NOT NULL,
CourseDate DATE CHECK (LEN(CourseDate) = 8),
WarehouseLocation NVARCHAR(100) NOT NULL,
CourseID NVARCHAR(25) NOT NULL,
PRIMARY KEY (StaffID, CourseDate, CourseID, WarehouseLocation),
FOREIGN KEY (StaffID) REFERENCES STAFF,
FOREIGN KEY (WarehouseLocation, CourseID, CourseDate) REFERENCES COURSE_OFFERING

Все будет хорошо, как в этой демонстрации


1

VBoka
15 Июл 2020 в 05:22

Настройте порядок столбцов в ПЕРВИЧНОМ КЛЮЧЕ в таблице ПРЕДЛОЖЕНИЕ КУРСА со столбцами в КЛЮЧЕВОМ КЛЮЧЕ в таблице STAFF_ALLOCATION. потому что раньше WarehouseLocation, CourseID, CourseDate = NVARCHAR, NVARCHAR, DATE при предложении курса CourseDate, WarehouseLocation, CourseID = DATE, NVARCHAR, NVARCHAR

CREATE TABLE COURSE_OFFERING (
    WarehouseLocation NVARCHAR(100) NOT NULL,
    CourseID NVARCHAR(25) NOT NULL,
    CourseDate DATE CHECK (LEN(CourseDate) = 8),
    PRIMARY KEY (WarehouseLocation,CourseID,CourseDate)
);

CREATE TABLE STAFF_ALLOCATION (
    StaffID NVARCHAR(100) NOT NULL,
    CourseDate DATE CHECK (LEN(CourseDate) = 8),
    WarehouseLocation NVARCHAR(100) NOT NULL,
    CourseID NVARCHAR(25) NOT NULL,
    PRIMARY KEY (StaffID, CourseDate, CourseID, WarehouseLocation),
    FOREIGN KEY (WarehouseLocation,CourseID,CourseDate) REFERENCES COURSE_OFFERING
);


0

Agung Panduan
15 Июл 2020 в 09:08

I’m trying to create a table with 3 columns. The first column should be an identity column named DescriptionsID, the second column should be a foreign key column named ProductID, and the third column should be an xml column named Description. But, I’m receiving an error:

Foreign Key ‘FK_ProductDescriptions_bacb18ce3aa67348e55d’ references invalid table ‘Product’ and «Could not create constraint or index. See previous errors.»

This is what I got:

CREATE TABLE ProductDescriptions (DescriptionsID int PRIMARY KEY NOT NULL,

ProductID varchar(25) NOT NULL,

FOREIGN KEY (ProductID) REFERENCES Product(ProductID),

Description text NULL) ;

References Product(ProductID) has the error/red underlining

asked Nov 26, 2018 at 1:28

Ryan's user avatar

2

When you create a Referential Constraint, You Need to make sure that the Table and the Column which you are referring already exists in the Database.

Also, the Datatype of Both Referring Column and the Referred Column Should Be the Same

Column 'Product.ProductId' is not the same data type as referencing column
'ProductDescriptions.ProductID' in the foreign key

So Create Product Table First, and set the Product Id as Primary Key

CREATE TABLE Product
(
    ProductId INT IDENTITY(1,1) PRIMARY KEY,
    ProductName VARCHAR(50)
)

CREATE TABLE ProductDescriptions 
(
    DescriptionsID int PRIMARY KEY NOT NULL,
    ProductID INT NOT NULL 
    ,FOREIGN KEY (ProductID) REFERENCES Product(ProductID),
    [Description] text NULL
) ;

answered Nov 26, 2018 at 5:46

Jayasurya Satheesh's user avatar

Когда вы создаете ссылочное ограничение, вам необходимо убедиться, что таблица и столбец, на которые вы ссылаетесь, уже существуют в базе данных.

Кроме того, тип данных ссылающегося столбца и указанного столбца должен быть одинаковым.

Column 'Product.ProductId' is not the same data type as referencing column
'ProductDescriptions.ProductID' in the foreign key

Итак, сначала создайте таблицу продуктов и установите идентификатор продукта в качестве первичного ключа

CREATE TABLE Product
(
    ProductId INT IDENTITY(1,1) PRIMARY KEY,
    ProductName VARCHAR(50)
)

CREATE TABLE ProductDescriptions 
(
    DescriptionsID int PRIMARY KEY NOT NULL,
    ProductID INT NOT NULL 
    ,FOREIGN KEY (ProductID) REFERENCES Product(ProductID),
    [Description] text NULL
) ;

  • Не удалось создать ключевую пару код ошибки 0x80090020
  • Не удалось сохранить игру код ошибки 503
  • Не удалось установить intel haxm код ошибки 255
  • Не удалось установить https соединение ошибка tls 54 ksc
  • Не удалось установить https соединение ошибка tls 54 kaspersky