Create table CustomerProducts
(
Customer_ProductID int identity primary key,
CustomerID int references Customers(CustomerID) not null,
ProductID int references Products(ProductID) not null,
OrderLimit int not null
)
Это то, что я вижу в возможно большинство из баз данных, которые я работал с на протяжении многих лет. Причина для разработки таблицы таким образом? Честно говоря, я не знаю! Я могу только предположить, что из-за недостатка понимания, что такое первичный ключ таблицы, и , это может быть нечто, отличное от идентификатора, и что оно может быть , состоящее из более чем одного столбца. Как я уже говорил, кажется, , что многие архитекторы баз данных просто не знают об этом факте.
Рассмотрим вместо следующей конструкции:
Create table CustomerProducts (
CustomerID int references Customers(CustomerID) not null,
ProductID int references Products(ProductID) not null,
OrderLimit int not null,
Primary key (CustomerID, ProductID))
Заметьте здесь, что мы устранили столбец идентификаторов, и имеют вместо определен композит (мульти-колонки) первичный ключ в качестве комбинации CustomerID и ProductID колонны. Поэтому мы делаем не нужно создавать дополнительные уникальные ограничения. У нас также нет нужен дополнительный столбец, который действительно не имеет никакой цели. Мы не только упростили нашу модель данных физически, но и сделали ее более логически обоснованной, а первичный ключ этой таблицы точно объясняет, что именно эта таблица моделирует: отношение идентификатора CustomerID к идентификатору продукта .