SQL Server - два столбца в дочерней таблице, ссылающиеся на один и тот же столбец в родительской таблице - PullRequest
0 голосов
/ 29 мая 2018

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

причина, по которой я сделал этот выбор дизайна, состоит в том, что родительская таблица содержит клиентов, но в то же время клиент может быть компанией-поставщиком другого клиента.

Проблема, с которой я сталкиваюсь, заключается в следующем: таблицасоздается правильно, но внешние ключи (относящиеся только к этим двум таблицам), похоже, дублируются как в дочерней таблице (Контракты - место, где они должны находиться), так и в Клиентах (не знаю, почему они также показаны здесь).Я вижу этот дубликат, когда открываю конструктор отношений SSMS и вижу в обеих таблицах наличие двух внешних ключей.

Ниже приведен код, вызывающий эту проблему (будут присутствовать другие таблицы, не упомянутые здесь).потому что они не создают проблем): Table Clients:

CREATE TABLE tblClients 
(
    VAT_Number NVARCHAR(30) NOT NULL PRIMARY KEY,
    Country_EID NVARCHAR(5) NOT NULL,
    User_EID NVARCHAR(50) NOT NULL,
    Is_Company_Group BIT NOT NULL,
    Recording_Date SMALLDATETIME NOT NULL 
        CONSTRAINT DF_tblClients_Recording_Date DEFAULT CONVERT(SMALLDATETIME, GETDATE()),
    General_Notes NVARCHAR(300),

    CONSTRAINT tblClients_Country_EID_FK 
        FOREIGN KEY (Country_EID) REFERENCES tblCountryLkp(Country_ID),

    CONSTRAINT tblClients_User_EID_FK 
        FOREIGN KEY (User_EID) REFERENCES tblUsers(User_ID)
);

Table Contracts:

CREATE TABLE tblContracts  
(
    Contract_ID_Old NVARCHAR(30) NOT NULL,
    Contract_ID_New NVARCHAR(15) NOT NULL,
    EVAT_Client NVARCHAR(30) NOT NULL,
    Billing_Type_EID INT NOT NULL,
    User_EID NVARCHAR(50) NOT NULL,
    Type_EID INT NOT NULL,
    EVAT_Company NVARCHAR(30) NOT NULL,
    Status_EID INT NOT NULL,
    Recording_Date SMALLDATETIME NOT NULL 
        CONSTRAINT DF_tblContracts_Recording_Date DEFAULT CONVERT(SMALLDATETIME, GETDATE()),

    PRIMARY KEY (Contract_ID_Old, Contract_ID_New),

    CONSTRAINT tblContracts_Billing_Type_EID_FK 
        FOREIGN KEY (Billing_Type_EID) REFERENCES tblBillingTypeLkp(Billing_Type_ID),

    CONSTRAINT tblContracts_User_EID_FK 
        FOREIGN KEY (User_EID) REFERENCES tblUsers(User_ID),

    CONSTRAINT tblContracts_Type_EID_FK 
        FOREIGN KEY (Type_EID) REFERENCES tblContractTypeLkp(Contract_Type_ID),

    CONSTRAINT tblContracts_Status_EID_FK 
        FOREIGN KEY (Status_EID) REFERENCES tblStatusLkp(Status_ID),

    CONSTRAINT tblContracts_EVAT_Client_Company_FK 
        FOREIGN KEY (EVAT_Client) REFERENCES tblClients(VAT_Number),

    CONSTRAINT tblContracts_EVAT_Company_FK 
        FOREIGN KEY (EVAT_Company) REFERENCES tblClients(VAT_Number)
);

Может кто-нибудь помочь мне найти проблему и избежать дублирования внешних ключейсвязанные с полями EVAT_Client и EVAT_Company созданы?

Спасибо.

1 Ответ

0 голосов
/ 29 мая 2018

Я отвечаю здесь на вопрос о KumarHarsh (так как в комментариях я не смог опубликовать изображения).На изображении будет представлен скриншот таблицы tblContracts, где можно увидеть два внешних ключа, которые, правильно, определены для этой таблицы.И скриншот таблицы tblClients, где можно увидеть два одинаковых внешних ключа, которые, на мой взгляд, некорректно присутствуют для таблицы tblClients.

Надеюсь, это поможет найти проблему.Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...