Внешний ключ, используемый в составном первичном ключе

Спасибо за чтение.

Можно ли использовать составной внешний ключ как часть составного первичного ключа таблицы?

Например, скажем, у меня есть две таблицы:

            CREATE TABLE DB.dbo.Partners
            (
                CONSTRAINT pk_Partners_Id
                PRIMARY KEY (Name, City, State, Country, PostalCode),

                Name                VARCHAR(100)
                                    NOT NULL,

                Address1            VARCHAR(100),

                Address2            VARCHAR(100),

                Address3            VARCHAR(100),

                City                VARCHAR(150)
                                    NOT NULL,

                State               CHAR(2)
                                    NOT NULL,

                Country             CHAR(2)
                                    NOT NULL,

                PostalCode          VARCHAR(16)
                                    NOT NULL,

                Phone               VARCHAR(20),

                Fax                 VARCHAR(20),

                Email               VARCHAR(256)
            )

... а затем во второй таблице я бы нравится ссылаться на внешний ключ в первичном ключе второй таблицы:

            CREATE TABLE DB.dbo.PartnerContacts
            (
                CONSTRAINT pk_PartnerContacts_Id
                PRIMARY KEY (fk_PartnerContacts_PartnerId, FirstName, LastName, PhoneNumber, Email),

                CONSTRAINT fk_PartnerContacts_PartnerId
                FOREIGN KEY REFERENCES Partners(Name, City, State, Country, PostalCode),

                FirstName           VARCHAR(75)
                                    NOT NULL,

                MiddleName          VARCHAR(75),

                LastName            VARCHAR(75)
                                    NOT NULL,

                PhoneNumber         VARCHAR(20)
                                    NOT NULL,

                MobileNumber        VARCHAR(20),

                FaxNumber           VARCHAR(20),

                Email               VARCHAR(256)
                                    NOT NULL,

                MailTo              VARCHAR(100),

                Address1            VARCHAR(100),

                Address2            VARCHAR(100),

                Address3            VARCHAR(100),

                City                VARCHAR(150),

                State               CHAR(2),

                Country             CHAR(2),

                PostalCode          VARCHAR(16)
            )

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

РЕДАКТИРОВАТЬ:

Я хотел предоставить окончательный рабочий SQL. Спасибо всем, кто ответил!

            CREATE TABLE DB.dbo.Partners
            (
                CONSTRAINT pk_Partners_Id
                PRIMARY KEY (Name, City, State, Country, PostalCode),

                Id                  INT
                                    NOT NULL
                                    UNIQUE
                                    IDENTITY(1, 1),

                Name                VARCHAR(100)
                                    NOT NULL,

                Address1            VARCHAR(100),

                Address2            VARCHAR(100),

                Address3            VARCHAR(100),

                City                VARCHAR(150)
                                    NOT NULL,

                State               CHAR(2)
                                    NOT NULL,

                Country             CHAR(2)
                                    NOT NULL,

                PostalCode          VARCHAR(16)
                                    NOT NULL,

                Phone               VARCHAR(20),

                Fax                 VARCHAR(20),

                Email               VARCHAR(256)
            )

            CREATE TABLE DB.dbo.PartnerContacts
            (
                CONSTRAINT pk_PartnerContacts_Id
                PRIMARY KEY
                (PartnerId, FirstName, LastName, PhoneNumber, Email),

                PartnerId           INT
                                    NOT NULL
                                    CONSTRAINT fk_PartnerContacts_PartnerId
                                    FOREIGN KEY REFERENCES Partners(Id),

                FirstName           VARCHAR(75)
                                    NOT NULL,

                MiddleName          VARCHAR(75),

                LastName            VARCHAR(75)
                                    NOT NULL,

                PhoneNumber         VARCHAR(20)
                                    NOT NULL,

                MobileNumber        VARCHAR(20),

                FaxNumber           VARCHAR(20),

                Email               VARCHAR(256)
                                    NOT NULL,

                MailTo              VARCHAR(100),

                Address1            VARCHAR(100),

                Address2            VARCHAR(100),

                Address3            VARCHAR(100),

                City                VARCHAR(150),

                State               CHAR(2),

                Country             CHAR(2),

                PostalCode          VARCHAR(16)
            )

Спасибо :)

11
задан Vince Fedorchak 4 October 2011 в 17:29
поделиться